Próbuję użyć wątków w projekcie Python, nad którym pracuję, ale wątki nie zachowują się tak jak powinny w moim kodzie. Wygląda na to, że wszystkie wątki są uruchamiane sekwencyjnie (tzn. Wątek 2 rozpoczyna się po zakończeniu wątku 1, obie nie rozpoczynają się w tym samym czasie). Napisałem prosty skrypt, aby przetestować to, i to też uruchamia wątki sekwencyjnie.Python threading wydaje się uruchamiać wątki sekwencyjnie
import threading
def something():
for i in xrange(10):
print "Hello"
def my_thing():
for i in xrange(10):
print "world"
threading.Thread(target=something).start()
threading.Thread(target=my_thing).start()
Oto wynik dostaję od prowadzenia go:
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
world
world
world
world
world
world
world
world
world
world
To samo zachowanie obserwuje się znacznie większej liczby iteracji pętli.
Próbowałem przeszukać sieć Web i starsze odpowiedzi SO, ale nie mogłem znaleźć niczego, co pomogłoby. Czy ktoś może wskazać, co jest nie tak z tym kodem?
To samo zachowanie z 10000 iteracjami – MAK
W rzeczywistym projekcie, nad którym pracuję, jeden z wątków jest nieskończoną pętlą, która nasłuchuje wiadomości i wywołuje funkcję zwrotną jako przybyli. Po prostu blokuje wszystkie pozostałe wątki. Niestety, aktualny kod pętli nie może być modyfikowany (po prostu nazywam metodę run() klasy w wątku). – MAK
Kiedy uruchamiam skrypt w ten sposób: './pythr.py | uniq -c' Otrzymuję: 8969 Hello | 1 Witaj świecie | 6626 świat | 1 | 3373 świat | 1030 Witaj. Zmienia to kontrolę - po prostu nie tak często ... – viraptor