2012-09-18 12 views
6

Mam funkcję, która przyjmuje wiele argumentów, z których niektóre są wartością logiczną. Próbuję przekazać to do wieloprocesowości pool.apply_async i chcę przekazać niektóre argumenty z załączonymi nazwami.Python do przetwarzania wieloprocesorowego z argumentami boolowskimi i wieloma argumentami

Oto przykładowy skrypt, który pracuję z:

from multiprocessing import Pool 

    def testFunc(y, x, calcY=True): 
     if calcY == True: 
      return y*y 
     elif calcY == False: 
      return x*x 

    if __name__ == "__main__": 
     p = Pool() 
     res = p.apply_async(testFunc, args = (2, 4, False)) 
     print res.get() 

To działa, ale jestem ciekawy temat zmiany res = p.apply_async(testFunc, args = (2, 4, False)) coś jak:

res = p.apply_async(testFunc, args = (2, 4, calcY = False)) 
+2

wypróbowałeś map_async (testFunc, 'args = (2, 4), kwargs = dict (calcY = False))'? –

+0

'map_async' nie zawiera słowa kluczowego' args' ani 'kwargs'. Twój przykładowy kod powinien wywołać TypeError. – unutbu

+0

@unutbu Przepraszam, to powinno być apply_async. Zmodyfikowałem kod, aby to odzwierciedlić. – user1074057

Odpowiedz

8

apply_async ma args i kwds argumenty słów kluczowych, których można użyć w następujący sposób:

res = p.apply_async(testFunc, args=(2, 4), kwds={'calcY': False}) 
Powiązane problemy