3
我正在用多進程使用python的多處理庫進行蒙特卡洛模擬。這些過程基本上可以猜出某個對象,並且如果它符合某些條件,它將被添加到共享列表中。如果此列表符合某些條件,我的計算就完成了。Python多處理:向所有進程發信號的最快方法?
我當前的代碼如下所示:(無僞不重要的細節)
mgr = Manager()
ns = mgr.Namespace()
ns.mylist = []
ns.othersharedstuff = x
killsig = mgr.Event()
processes = [ MyProcess(ns, killsig) for _ in range(8) ]
for p in processes: p.start()
for p in processes: p.join()
get data from ns.mylist()
def MyProcess.run(self):
localdata = y
while not killsig.is_set():
x = guessObject()
if x.meetsCondition():
add x to ns.mylist and put local data into ns()
if ns.mylist meets condition:
killsig.set()
put local data into ns()
當我更換「而不是killsig.is_set():」有「而真正的:」我的模擬速度增加大約25%! (除了它當然不會終止)
有沒有比使用信號更快的方法?如果每個進程的非同步本地數據都丟失並不重要,那麼涉及到process.terminate()的內容也可以。