我正在尝试使用python运行并行进程。我设法使用多处理模块做到了。
问题是当我在代码的开头添加“清除所有变量”时,算法会给我这个错误:
追踪(最近一次呼叫最后一次):
文件“”,第1行,in RUNFILE( 'C:/Users/cuca/Dropbox/USP/Pesquisa/PosQuali/Paralelo/Paraleltest2.py', WDIR = 'C:/用户/ CUCA /升降梭箱/ USP / Pesquisa / PosQuali / Paralelo')
文件 “C:\ Python27 \ LIB \站点包\ spyderlib \部件\ externalshell \ sitecustomize.py” 第685行,在runfile中 execfile(filename,namespace)
文件 “C:\ Python27 \ LIB \站点包\ spyderlib \部件\ externalshell \ sitecustomize.py” 第71行,在execfile中 exec(compile(scripttext,filename,'exec'),glob,loc)
文件 “C:/Users/cuca/Dropbox/USP/Pesquisa/PosQuali/Paralelo/Paraleltest2.py” 第36行,in answer1 = result1.get(timeout = 1)
文件“C:\ Python27 \ lib \ multiprocessing \ pool.py”,第563行,在get中 引发TimeoutError
TimeoutError
当我从算法的开头删除“清除所有变量”程序时,它可以工作。
知道为什么吗?
感谢。
#Clear All
all = [var for var in globals() if var[0] != "_"]
for var in all:
del globals()[var]
from multiprocessing import Pool
import math
def Func1(A):
for i in range(1000,100000):
R = A * math.cos(i) * math.cos(i)
return R
if __name__ == '__main__':
pool = Pool()
result1 = pool.apply_async(Func1, [2])
result2 = pool.apply_async(Func1, [4])
answer1 = result1.get(timeout=1)
answer2 = result2.get(timeout=1)
答案 0 :(得分:1)
这可能与使用multiprocessing on Windows的限制有关。
由于Windows缺少
os.fork()
,因此它有一些额外的限制。
可能是某些全局变量用于控制Windows下的多处理,而您正在打破它。在删除之前尝试打印变量名称。
如果您描述清除所有全局变量的原因,您将获得更多有用的答案。我猜你最好使用更少的全局变量,所以你不必清除它们。