2012-09-18 16 views
6

Tengo una función que toma varios argumentos, algunos de los cuales son booleanos. Estoy tratando de pasar esto al multiprocesamiento pool.apply_async y quiero pasar algunos argumentos con los nombres adjuntos.multiproceso de python con argumentos booleanos y múltiples

Aquí es un script de ejemplo que estoy trabajando con:

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() 

Esto funciona, pero tengo curiosidad acerca de cambiar el res = p.apply_async(testFunc, args = (2, 4, False)) a algo como:

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

¿Has probado map_async (testFunc, 'args = (2, 4), kwargs = dict (calcY = False))'? –

+0

'map_async' no toma una palabra clave' args' ni 'kwargs'. Su código de ejemplo debería haber generado un TypeError. – unutbu

+0

@unutbu Lo siento, debería haber sido apply_async. He editado el código para reflejar esto. – user1074057

Respuesta

8

apply_async tiene args y kwds argumentos de palabra clave que puede usar de esta manera:

res = p.apply_async(testFunc, args=(2, 4), kwds={'calcY': False}) 
Cuestiones relacionadas