Sto usando gevent e sono scimmia patch tutto.
Sembra che il patching della scimmia faccia sì che la filettatura funzioni in serie.Utilizzando scimmia gevent patching con filettatura rende il lavoro filo serialmente
Il mio codice:
import threading
from gevent import monkey; monkey.patch_all()
class ExampleThread(threading.Thread):
def run(self):
do_stuff() # takes a few minutes to finish
print 'finished working'
if __name__ == '__main__':
worker = ExampleThread()
worker.start()
print 'this should be printed before the worker finished'
modo che il filo non funziona come previsto.
Ma se rimuovo lo monkey.patch_all()
funziona correttamente.
Il problema è che ho bisogno del monkey.patch_all()
per l'utilizzo di gevent (ora dimostrato nel codice qui sopra)
La mia soluzione:
ho cambiato il
monkey.patch_all()
a
monkey.patch_all(thread=False)
quindi non sto rattoppando il thread.
Ho modificato la mia domanda. Non posso usare il sonno perché il mio lavoro richiede alcuni minuti, – yossi
@yossi Se hai un'attività che richiede molto tempo per essere completata e non è possibile ottenere il controllo ad un certo punto, allora hai bisogno di thread reali invece di coroutine. In tal caso, direi che è meglio non applicare patch ai thread. – jcollado
ok, quello che ho fatto è monkey.patch_all (thread = False) – yossi