2010-09-03 54 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