2013-03-17 9 views
8

Obecnie próbuję dowiedzieć się, jak wątki działają w python.Python: Uruchamianie funkcji w wątku nie modyfikuje current_thread()

Mam następujący kod:

def func1(arg1, arg2): 

    print current_thread() 
    .... 

class class1: 

    def __init__(): 
     .... 

    def func_call(): 
     print current_thread() 
     t1 = threading.Thread(func1(arg1, arg2)) 
     t1.start() 
     t1.join() 

Co zauważyłem, że zarówno druki wyjście to samo. Dlaczego wątek się nie zmienia?

Odpowiedz

17

Wykonujesz funkcję zamiast ją przekazywać. Spróbuj to zamiast:

t1 = threading.Thread(target = func1, args = (arg1, arg2)) 
+0

Udało się, dziękuję bardzo! –

5

Jesteś wywołaniu funkcji zanim zostanie podany do konstruktora Thread. Podajesz także jako zły argument (pierwszym argumentem pozycyjnym konstruktora wątków jest group). Zakładając, że func1 zwraca None, to co robisz, jest równoważne wywołaniu threading.Thread(None) lub threading.Thread(). Zostało to wyjaśnione bardziej szczegółowo w threading docs.

Aby praca kod spróbuj tego:

t1 = threading.Thread(target=func1, args=(arg1, arg2)) 
t1.start() 
t1.join() 
Powiązane problemy