16

Voglio passare argomenti denominati alla funzione di destinazione, mentre si crea un oggetto Thread.Passare gli argomenti delle parole chiave alla funzione di destinazione in threading Python. Thread

seguito è il codice che ho scritto:

import threading 

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

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

ottengo un errore di sintassi per "x = 1", in linea 6. voglio sapere come posso passare argomenti a parola chiave al bersaglio funzione.

+2

Hai letto [la documentazione] (https://docs.python.org/2/library/threading.html#threading.Thread)? – jonrsharpe

+0

Non è necessario utilizzare specificare i nomi degli argomenti, è possibile utilizzare una tupla semplice: 't = threading.Thread (target = f, args = (1,2,))' – bonh

risposta

32

questo passerà un dizionario con i nomi degli argomenti delle parole chiave come valori di chiavi e argomenti come valori nel dizionario. l'altra risposta sopra non funzionerà, perché "x" e "y" non sono definiti in tale ambito.

un altro esempio, questa volta con multiprocessing, il passaggio di argomenti sia posizionali e parole chiave:

la funzione in uso:

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

e poi quando viene chiamato utilizza multiprocessing:

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

Ti preghiamo di considerare la modifica del tuo post per aggiungere ulteriori spiegazioni su cosa fa il tuo codice e perché risolverà il problema. Una risposta che per lo più contiene solo codice (anche se funziona) di solito non aiuta l'OP a capire il loro problema. – SuperBiasedMan

+0

Non ho alcun problema con la risposta di vladosaurus così com'è. Più non è sempre più utile; essere concisi è. In questo caso salva la mia giornata in pochi secondi. –

1

Provare a sostituire args con kwargs={x: 1, y: 2}.

+0

Sicuramente no. ITYM '{'x': 1, 'y': 2}', che è un'enorme differenza. – glglgl

3

È puoi anche passare un dizionario direttamente su 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()