2010-09-03 18 views
7

tôi có mã đó, đơn giản hóa xuống, trông như thế này:Functools.partial không hoạt động với đa xử lý.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 

đó làm việc tốt khi tôi chạy nó trong chế độ quá trình duy nhất, nhưng không thành công với các lỗi như thế này

TypeError: type 'partial' takes at least one argument 

lẫn lộn cùng với ngăn xếp cuộc gọi dài thông qua mô-đun đa xử lý. Chuyện gì vậy?

Tôi đang sử dụng trăn 2.6.1.

Trả lời

4

Google cho tôi biết đây là bug in Python; dường như cố định trong Py3k. Nó được cho là do partial không được chọn.

Có một số workaround.

+0

liên kết 'workaround' đã chết! Vui lòng cập nhật –

+0

được cập nhật để trỏ tới web.archive :) – katrielalex

Các vấn đề liên quan