2010-09-03 91 views
7

我有一些代码,简化了下来,看起来是这样的:functools.partial不适用于multiprocessing.Pool.map吗?

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。

回答

4

Google告诉我这是一个bug in Python;显然固定在Py3k中。这应该是由于partial不可挑选。有一个workaround

+0

'解决方法'链接已死!请更新 – 2017-10-25 06:51:54

+0

更新为指向web.archive :) – katrielalex 2017-10-25 20:10:15