18
私はgeventを使用しています。私はすべて猿のパッチを当てています。
サルのパッチを適用するとスレッドが連続して動作するようです。スレッドを使ってgevent monkeyをパッチすると、スレッドが連続的に処理されます
マイコード:
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'
期待ようにスレッドが動作していません。
しかし、もし私がmonkey.patch_all()
を取り除くとうまくいきます。
問題は、私は(今、上記のコードで示す)gevent
マイ溶液を使用するmonkey.patch_all()
を必要とすることである:私は
monkey.patch_all(thread=False)
に monkey.patch_all()
を変更
を
私はスレッドにパッチを当てていません。
私は私の質問を編集した:
これを行う方法は、(これは自動的に生成します)または
gevent.sleep
パッチが適用されているブロッキング操作を呼び出すことです。 – yossi@yossi完了までに時間がかかり、ある時点で制御を出すことができないタスクがある場合は、コルーチンの代わりに実際のスレッドが必要です。そのような場合は、スレッドにパッチを当てない方が良いと言いたいと思います。 – jcollado
ok、私がしたのはmonkey.patch_all(スレッド= False) – yossi