Sto cercando di utilizzare i thread in un progetto Python su cui sto lavorando, ma i thread non sembrano comportarsi come dovrebbero nel mio codice. Sembra che tutti i thread vengano eseguiti in modo sequenziale (cioè thread2 inizia dopo che il thread 1 termina, entrambi non iniziano contemporaneamente). Ho scritto un semplice script per testarlo e anche questo esegue i thread in modo sequenziale.Sembra che il threading Python esegua i thread in sequenza
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()
Ecco l'output che ricevo da eseguirlo:
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
world
world
world
world
world
world
world
world
world
world
Lo stesso comportamento viene osservato con molto più grande numero di iterazioni dei cicli.
Ho provato a cercare sul Web e le risposte SO meno recenti, ma non sono riuscito a trovare nulla che mi aiutasse. Qualcuno può indicare cosa c'è di sbagliato in questo codice?
Stesso comportamento con 10000 iterazioni – MAK
Sul progetto attuale su cui sto lavorando, uno dei thread è un ciclo infinito che ascolta i messaggi e chiama una funzione di callback come arrivano. Blocca solo tutti gli altri thread. Sfortunatamente, il codice loop attuale non può essere modificato (ho appena chiamato il metodo run() di una classe all'interno del thread). – MAK
Quando eseguo lo script in questo modo: './pythr.py | uniq -c' Ottengo: 8969 Ciao | 1 Ciao mondo | 6626 mondo | 1 | 3373 mondo | 1030 Ciao. Quindi cambia il controllo - non è così spesso ... – viraptor