そのため、pycharm の実行中に gevent を 1.1rc4 (1.0.2 から) にアップグレードした後、greenlets を適切に参加させることができません...次のコードを例にとります。
from gevent import monkey, Greenlet, hub
import gevent
hub.Hub.resolver_class = ['gevent.resolver_ares.Resolver']
monkey.patch_all()
def sleepy(time):
gevent.sleep(time)
print "done like a good script"
if __name__ == '__main__':
g = gevent.spawn(sleepy,10)
g.start()
g.join()
print "if this is the only log line, then join didn't work"
出力します:
"if this is the only log line, then join didn't work"
IDE から、CLI から同じインタープリターを使用して正常に実行されます。
私は cli と gui のコードをたどりましgreenlet.join()
たhub.switch()
。
def switch(self):
switch_out = getattr(getcurrent(), 'switch_out', None)
if switch_out is not None:
switch_out()
return greenlet.switch(self)
その最後の行は、greenlet が実行される前にすぐに戻ります... pycharm デバッガーはそのコードにステップインさせません...
どんな助けでも素晴らしいでしょう...コルーチンのフロー制御は、うまくいくと十分に難しいです...