2012-07-18 20 views
8

Aquí hay un ejemplo simple del uso de argumentos de palabra clave en una llamada a función. Nada especial.Argumentos de palabra clave de multiprocesamiento de Python

def foo(arg1,arg2, **args): 
    print arg1, arg2 
    print (args) 
    print args['x'] 

args ={'x':2, 'y':3} 
foo(1,2,**args) 

que imprime, como se esperaba:

1 2 
{'y': 3, 'x': 2} 
2 

Estoy tratando de pasar los argumentos de palabras clave misma de estilo para una tarea de multiprocesamiento, pero el uso de **, en la lista de argumentos es un error de sintaxis . Sé que mi función, stretch() tomará dos argumentos de posición y n argumentos de palabra clave.

pool = [multiprocessing.Process(target=stretch, args= (shared_arr,slice(i, i+step),**args)) for i in range (0, y, step)] 

¿Es posible pasar argumentos de palabras clave a un multiprocessing.Process? ¿Si es así, cómo? Si no, ¿por qué?

+1

Debe nombrar 'kwargs' kwargs y no' args'. – kev

Respuesta

15

El diccionario que está utilizando como palabra clave args se debe pasar como el parámetro kwargs al objeto Process.

pool = [multiprocessing.Process(target=stretch, args= (shared_arr,slice(i, i+step)),kwargs=args) for i in range (0, y, step)] 
+0

Scratch that. Lo tengo trabajando moviendo el() también. ¡Gracias! – Jzl5325

Cuestiones relacionadas