使用 pycharm + gevent greenlet.join() 不再阻塞



所以在通过 pycharm 运行时将 gevent 升级到 1.1rc4(从 1.0.2)后,我无法让绿素正确加入......以这段代码为例:

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)

最后一行,将在绿叶执行之前立即返回......pycharm 调试器不会让我单步进入该代码......

任何帮助都会很棒...协程流控制在工作时已经够难的了......

Pycharm 对 stdin(并不总是很好)做了一些魔术。

尝试在每次打印语句后立即刷新您的 stdin,方法是执行以下操作:

import sys
sys.stdin.flush()

还要在最后添加time.sleep(1)

可能是

您的脚本在输出 print 语句之前退出。我不知道这是否可行,但绝对更糟。

如果它不起作用,请尝试输出到文件,看看它是否正常工作。

我在 jetbrains 上打开了一个错误,它被标记为重复:https://youtrack.jetbrains.com/issue/PY-14992

我还没有查看 gevent 的所有调试问题,但这个简单的案例在 2016.1 年 3 月 23 日的 2016 版本中得到了修复

最新更新