16

Ich möchte benannte Argumente an die Zielfunktion übergeben, während ein Thread-Objekt erstellt wird.Übergeben Sie Schlüsselwortargumente an die Zielfunktion in Python threading.Thread

Es folgt der Code, den ich geschrieben habe:

import threading 

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

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

ich einen Syntaxfehler erhalten für „x 1 =“ in Zeile 6. Ich möchte wissen, wie ich Keyword-Argumente an das Ziel gelangen kann Funktion.

+2

Haben Sie [die Dokumentation] (https://docs.python.org/2/library/threading.html#threading.Thread) gelesen? – jonrsharpe

+0

Sie müssen nicht die Namen der Argumente angeben, Sie können ein einfaches Tupel verwenden: 't = threading.Thread (target = f, args = (1,2,))' – bonh

Antwort

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

Dies wird ein Wörterbuch mit dem Schlüsselwort Argumente Namen als Schlüssel und Argument Werte als Werte im Wörterbuch übergeben. Die andere obige Antwort funktioniert nicht, weil "x" und "y" in diesem Bereich nicht definiert sind.

ein weiteres Beispiel, diesmal mit Multiprozessing, beide Lage- und Keyword gibt Argumente:

die verwendete Funktion Wesen:

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

und dann aufgerufen, wenn mit Multiprocessing:

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

Bitte bedenken Sie, dass Sie Ihren Post bearbeiten müssen, um weitere Erklärungen dazu zu erhalten, was Ihr Code tut und warum es das Problem löst. Eine Antwort, die meist nur Code enthält (auch wenn es funktioniert), hilft dem OP normalerweise nicht, sein Problem zu verstehen. – SuperBiasedMan

+0

Ich habe kein Problem mit der Antwort von Vladosaurus, wie es ist. Länger ist nicht immer hilfreicher; prägnant sein ist. In diesem Fall speichert es meinen Tag innerhalb von Sekunden. –

1

Versuchen Sie, args durch kwargs={x: 1, y: 2} zu ersetzen.

+0

Sicher nicht. ITYM '{'x': 1, 'y': 2}', was ein großer Unterschied ist. – glglgl

3

Sie kann auch gerade ein Wörterbuch direkt an kwargs übergeben:

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