我正在寻找一种解决方案来进行多处理以运行脚本。
我有一个启动4个进程的函数,每个进程通过runpy.run_path()
执行一个脚本,然后返回。
示例:
def valorise(product, dico_valo):
res = runpy.run_path(product +"/PyScript.py", run_name="__main__")
dico_valo[product] = res["ret"]
def f(mutex,l,dico):
while len(l)!= 0:
mutex.acquire()
product = l.pop(0)
mutex.release()
p = Process(target=valorise, args=(product,dico))
p.start()
p.join()
def run_parallel_computations(valuationDate, list_scripts):
if len(product_list)>0:
print '\n\nPARALLEL COMPUTATIONS BEGIN..........\n\n'
manager = Manager()
l = manager.list(list_scripts)
dico = manager.dict()
mutex = Lock()
p1 = Process(target=f, args=(mutex,l,dico), name="script1")
p2 = Process(target=f, args=(mutex,l,dico), name="script2")
p3 = Process(target=f, args=(mutex,l,dico), name="script3")
p4 = Process(target=f, args=(mutex,l,dico), name="script4")
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
dico_isin = {}
for i in iter(dico.keys()):
dico_isin[i] = dico[i]
return dico
print '\n\nPARALLEL COMPUTATIONS END..........'
else:
print '\n\nNOTHING TO PRICE !'
在每个PyScript.py中,我导入一个库,每个脚本都必须再次导入它。但是,在这种情况下,它并没有按照我的意愿工作,我也不明白为什么。我的图书馆在第一个过程中被导入一次,同样的" import"用于其他过程。 你能帮帮我吗?
谢谢!
答案 0 :(得分:0)
多处理可能不是这种情况(但看起来很像)。
如果您尝试多次导入某些内容(即大多数模块中的import re
),Python将不会重新导入'它。正如它将在已导入的模块中看到它并将跳过它。
要强制重新加载,您可以尝试reload(module_name)(它无法从模块重新加载单个类/方法的导入,您可以重新加载整个模块或什么都没有)