Pase argumentos de palabras clave a la función de destino en Python threading.Hilo


Quiero pasar argumentos con nombre a la función de destino, mientras se crea un objeto Thread.

El siguiente es el código que he escrito:

import threading

def f(x=None, y=None):
    print x,y

t = threading.Thread(target=f, args=(x=1,y=2,))
t.start()

Recibo un error de sintaxis para "x=1", en la Línea 6. Quiero saber cómo puedo pasar argumentos de palabras clave a la función de destino.

Author: xennygrimmato, 2015-06-18

3 answers

t = threading.Thread(target=f, kwargs={'x': 1,'y': 2})

Esto pasará un diccionario con los nombres de los argumentos de la palabra clave como claves y los valores de los argumentos como valores en el diccionario. la otra respuesta anterior no funcionará, porque la "x" y la " y " no están definidas en ese ámbito.

Otro ejemplo, esta vez con multiprocesamiento, pasando argumentos posicionales y de palabras clave:

La función utilizada es:

def f(x, y, kw1=10, kw2='1'):
    pass

Y luego cuando se llama usando multiprocesamiento:

p = multiprocessing.Process(target=f, args=('a1', 2,), kwargs={'kw1': 1, 'kw2': '2'})
 44
Author: vladosaurus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-23 08:18:46

También puede pasar un diccionario directamente a kwargs:

import threading

def f(x=None, y=None):
    print x,y

my_dict = {'x':1, 'y':2}
t = threading.Thread(target=f, kwargs=my_dict)
t.start()
 4
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-04 22:57:30

Intenta reemplazar args por kwargs={x: 1, y: 2}.

 1
Author: f43d65,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-18 16:12:38