对于C++,我们可以使用OpenMP进行并行编程; 但是,OpenMP不适用于Python.如果我想并行我的python程序的某些部分,我该怎么办?
代码的结构可以被认为是:
solve1(A)
solve2(B)
Run Code Online (Sandbox Code Playgroud)
哪里solve1和solve2是两个独立的功能.如何并行运行这种代码而不是按顺序运行以减少运行时间?希望可以有人帮帮我.首先十分感谢.代码是:
def solve(Q, G, n):
i = 0
tol = 10 ** -4
while i < 1000:
inneropt, partition, x = setinner(Q, G, n)
outeropt = setouter(Q, G, n)
if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol:
break
node1 = partition[0]
node2 = partition[1]
G = updateGraph(G, node1, node2)
if i == 999:
print "Maximum iteration reaches"
print inneropt
Run Code Online (Sandbox Code Playgroud)
setinner和setouter是两个独立的函数.这就是我要平行的地方......
我正在尝试在我的8处理器64位Windows 7机器上完成100个模型运行.我想同时运行7个模型实例以减少我的总运行时间(每个模型运行大约9.5分钟).我查看了几个与Python的Multiprocessing模块有关的线程,但我仍然遗漏了一些东西.
我的过程:
我有100个不同的参数集,我想通过SEAWAT/MODFLOW来比较结果.我为每个模型运行预先构建了模型输入文件,并将它们存储在自己的目录中.我希望能够做的是一次运行7个模型,直到完成所有实现.不需要在进程之间进行通信或显示结果.到目前为止,我只能按顺序生成模型:
import os,subprocess
import multiprocessing as mp
ws = r'D:\Data\Users\jbellino\Project\stJohnsDeepening\model\xsec_a'
files = []
for f in os.listdir(ws + r'\fieldgen\reals'):
if f.endswith('.npy'):
files.append(f)
## def work(cmd):
## return subprocess.call(cmd, shell=False)
def run(f,def_param=ws):
real = f.split('_')[2].split('.')[0]
print 'Realization %s' % real
mf2k = r'c:\modflow\mf2k.1_19\bin\mf2k.exe '
mf2k5 = r'c:\modflow\MF2005_1_8\bin\mf2005.exe '
seawatV4 = r'c:\modflow\swt_v4_00_04\exe\swt_v4.exe '
seawatV4x64 = r'c:\modflow\swt_v4_00_04\exe\swt_v4x64.exe '
exe = seawatV4x64
swt_nam = ws + r'\reals\real%s\ss\ss.nam_swt' % real
os.system( exe + swt_nam )
if __name__ == '__main__': …Run Code Online (Sandbox Code Playgroud) 给定一个大列表(1,000 多个)完全独立的对象,每个对象都需要通过一些昂贵的函数(每个大约 5 分钟)进行操作,将工作分配给其他核心的最佳方法是什么?理论上,我可以将列表分成相等的部分,并使用 cPickle 序列化数据(需要几秒钟),然后为每个块启动一个新的 python 进程——如果我打算使用多台计算机,可能会出现这样的情况—— -但这感觉更像是一种黑客行为。当然有一种更集成的方法可以使用多处理库来做到这一点?我是不是想太多了?
谢谢。