À l'aide de gevent monkey patching avec filetage, fait de fil de travail en série
Je suis en utilisant gevent et je suis monkey patching tout.
Il semble que le monkey patching causes les threads de travail en série.
Mon code:
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'
De sorte que le fil ne fonctionne pas comme prévu.
Mais si je supprime le monkey.patch_all()
il fonctionne très bien.
Le problème est que j'ai besoin de la monkey.patch_all()
pour l'utilisation de gevent (maintenant indiqué dans le code ci-dessus)
Ma solution:
J'ai changé le
monkey.patch_all()
à
monkey.patch_all(thread=False)
donc je ne suis pas patcher le fil.
Vous devez vous connecter pour publier un commentaire.
Quand les fils sont de singe patché en gevent, ils se comportent comme des coroutines. Cela signifie que vous devez explicitement le contrôle du rendement pour le rendre possible pour les autres coroutines à exécuter.
La façon de le faire est d'appeler une opération de blocage qui a été patché (cela donnera automatiquement) ou
gevent.le sommeil
:Vous pouvez laisser votre Fil à base de classe à la place si vous remplacez la
Thread
avecGreenlet
, par exemple comme ceci:il fonctionne comme vous le souhaitez puis.