我想在平行的几个文件运行一些Python代码。 该结构基本上是:
def process_file(filename, foo, bar, baz=biz):
# do stuff that may fail and cause exception
if __name__ == '__main__':
# setup code setting parameters foo, bar, and biz
psize = multiprocessing.cpu_count()*2
pool = multiprocessing.Pool(processes=psize)
map(lambda x: pool.apply_async(process_file, (x, foo, bar), dict(baz=biz)), sys.argv[1:])
pool.close()
pool.join()
我以前用过pool.map做同样的事情,它的工作很好,但我似乎无法使用,这里因为pool.map没有(出现)让我在额外的参数传递(和使用lambda来做到这一点不会工作,因为拉姆达不能被整理)。
所以,现在我想要得到的东西()直接使用apply_async工作。 我的问题是,代码似乎挂起,永远不会退出。 几个文件的失败,一个例外,但我不明白为什么什么会导致加盟失败/挂机? 有趣的是,如果没有这些文件的失败,一个例外,它退出干净。
我在想什么?
编辑:当函数(因而工人)失败,我看到这个异常:
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 505, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 376, in _handle_results
task = get()
TypeError: ('__init__() takes at least 3 arguments (1 given)', <class 'subprocess.CalledProcessError'>, ())
如果我看到的这些连一个,过程父进程挂起永远,永远收获着孩子们和退出。