我的代码简化后看起来像这样:
run = functools.partial(run, grep=options.grep, print_only=options.print_only, force=options.force)
if not options.single and not options.print_only and options.n > 0:
pool = multiprocessing.Pool(options.n)
Map = pool.map
else: Map = map
for f in args:
with open(f) as fh: Map(run, fh)
try:
pool.close()
pool.join()
except NameError: pass
当我在单进程模式下运行它时,它工作正常,但失败并出现这样的错误
TypeError: type 'partial' takes at least one argument
通过多处理模块与长调用堆栈混合在一起。怎么回事?
我正在使用 python 2.6.1。
最佳答案
Google 告诉我这是一个 bug in Python ;显然在 Py3k 中已修复。这应该是由于 partial
不是可腌制的。
有一个workaround .
关于python - functools.partial 是否不适用于 multiprocessing.Pool.map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3637847/