清除所有变量时在Python中进行并行处理

时间:2016-06-08 20:06:08

标签: python parallel-processing multiprocessing

我正在尝试使用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,'e​​xec'),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)

1 个答案:

答案 0 :(得分:1)

这可能与使用multiprocessing on Windows的限制有关。

  

由于Windows缺少os.fork(),因此它有一些额外的限制。

可能是某些全局变量用于控制Windows下的多处理,而您正在打破它。在删除之前尝试打印变量名称。

如果您描述清除所有全局变量的原因,您将获得更多有用的答案。我猜你最好使用更少的全局变量,所以你不必清除它们。