0

そのため、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 デバッガーはそのコードにステップインさせません...

どんな助けでも素晴らしいでしょう...コルーチンのフロー制御は、うまくいくと十分に難しいです...

4

2 に答える 2

1

Pycharm は、stdin を使用して (常にうまくいくとは限りませんが) いくつかの魔法を行います。

次のようにして、各 print ステートメントの直後に stdin をフラッシュしてみてください。

import sys
sys.stdin.flush()

また、最後に追加time.sleep(1)します。

print ステートメントが出力される前にスクリプトが終了した可能性があります。それがうまくいくかどうかはわかりませんが、試してみると間違いなく悪化します。

動作しない場合は、ファイルに出力してみて、正しく動作するかどうかを確認してください。

于 2016-03-24T22:32:55.447 に答える