web-dev-qa-db-fra.com

Passez des arguments de mots clés à la fonction cible dans Python threading.Thread

Je veux passer des arguments nommés à la fonction cible, tout en créant un objet Thread.

Voici le code que j'ai écrit:

import threading

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

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

J'obtiens une erreur de syntaxe pour "x = 1", à la ligne 6. Je veux savoir comment je peux passer des arguments de mots clés à la fonction cible.

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

cela passera un dictionnaire avec les noms des arguments de mot-clé comme clés et les valeurs d'argument comme valeurs dans le dictionnaire. l'autre réponse ci-dessus ne fonctionnera pas, car les "x" et "y" ne sont pas définis dans cette portée.

un autre exemple, cette fois avec le multitraitement, en passant à la fois des arguments positionnels et des mots clés:

la fonction utilisée étant:

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

puis lorsqu'il est appelé à l'aide du multitraitement:

p = multiprocessing.Process(target=f, args=('a1', 2,), kwargs={'kw1': 1, 'kw2': '2'})
53
vladosaurus

Vous pouvez également passer un dictionnaire directement à 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()
6
Daniel

Essayez de remplacer args par kwargs={x: 1, y: 2}.

1
f43d65