2010-09-03 8 views
7

mam kodu, uproszczone w dół, wygląda następująco:Czy functools.partial nie działa z wieloprocesorem.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 

To działa dobrze, gdy go uruchomić w trybie pojedynczego procesu, ale nie z błędami jak ten

TypeError: type 'partial' takes at least one argument 

miesza się razem z długie połączenia stosu przez moduł wieloprocesowy. Co się dzieje?

Używam Pythona 2.6.1.

Odpowiedz

4

Google mówi mi, że jest to bug in Python; najwyraźniej naprawione w Py3k. Jest to ponoć spowodowane tym, że partial nie można wybrać. Jest to workaround.

+0

Łącze 'workaround' nie działa! Zaktualizuj –

+0

zaktualizowaną do punktu w web.archive :) – katrielalex