2016-02-19 50 views
0

因此,在通過pycharm運行時gevent升級到1.1rc4(從1.0.2)之後,我無法讓greenlet正確地加入......將此代碼例如:使用pycharm + gevent greenlet.join()不再阻止

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和在那裏的代碼是不同的CE行爲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調試器不會讓我步入代碼.. 。

任何幫助將是巨大的......協同程序的流量控制是夠硬時,它的工作原理...

回答

0

我開於JetBrains的一個bug,它被標記爲一個重複:https://youtrack.jetbrains.com/issue/PY-14992

我沒有看過我所有的與GEVENT調試的問題,但這個簡單的情況下,固定與2016.1發行版去out 2016/3/23

0

Pycharm做一些魔術(並不總是很好):標準輸入。

嘗試做這個每個打印報表後,刷新你的標準輸入正確的:

import sys 
sys.stdin.flush() 

在最後還有補充time.sleep(1)

這可能是您的腳本在print語句輸出之前退出。我不知道這是否會奏效,但絕對是一次嘗試。

如果它不起作用,請嘗試輸出到文件,看看是否正常工作。

+0

其實pycharm的發佈昨天解決了這個問題。 –

+1

好的,那是好消息。 – DevShark