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 使用标准输入做了一些魔术(并不总是很好)。

尝试通过执行以下操作在每个打印语句之后立即刷新您的标准输入:

import sys
sys.stdin.flush()

最后还要加上time.sleep(1)

可能是您的脚本在打印语句输出之前退出。我不知道这是否会奏效,但肯定会更糟。

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

于 2016-03-24T22:32:55.447 回答
0

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

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

于 2016-03-24T23:16:34.260 回答