2016-07-25 59 views
4

升级从PyCharm 2016年1月4日至2016.2后后,运行调试器和设置任何断点时,PyCharm停止在我没有断点设置不同的地方,并记录此标准错误:BlockingSwitchOutError调试器升级到PyCharm 2016.2

Traceback (most recent call last): 
    File "/usr/local/pycharm/debug-eggs/pycharm-debug.egg/_pydevd_bundle/pydevd_frame.py", line 539, in trace_dispatch 
    self.do_wait_suspend(thread, frame, event, arg) 
    File "/usr/local/pycharm/debug-eggs/pycharm-debug.egg/_pydevd_bundle/pydevd_frame.py", line 71, in do_wait_suspend 
    self._args[0].do_wait_suspend(*args, **kwargs) 
    File "/usr/local/pycharm/debug-eggs/pycharm-debug.egg/pydevd.py", line 714, in do_wait_suspend 
    time.sleep(0.01) 
    File "/home/jaza/mypyapp/mypyfile.py", line 999, in mypyfunc 
    gevent.sleep(seconds) 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 194, in sleep 
    hub.wait(loop.timer(seconds, ref=ref)) 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 630, in wait 
    result = waiter.get() 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 878, in get 
    return self.hub.switch() 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 608, in switch 
    switch_out() 
    File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 612, in switch_out 
    raise BlockingSwitchOutError('Impossible to call blocking function in the event loop callback') 
BlockingSwitchOutError: Impossible to call blocking function in the event loop callback 

操作系统:Linux Mint 17.3(即与Ubuntu 14.04几乎相同)。使用最新的gevent(1.1.2)。

如果我打开我的旧PyCharm(即2016.1.4),并做同样的事情 - 即启动调试器,设置断点,运行我的应用程序 - 我没有得到这些错误,PyCharm不会停止代码中的任何地方除了我的断点。

我也尝试了只是“降级”调试器,通过重命名debug-eggs目录并将其替换为旧的debug-eggs路径,然后在最新版本上运行PyCharm的其余部分。这并没有解决问题,即它仍然导致BlockingSwitchOutError被无数次提升。

似乎这可能是PyCharm 2016.2中的一个错误。我已经向JetBrains提交了一个错误报告,请参阅https://youtrack.jetbrains.com/issue/PY-20183。但是也可以在SO上张贴,以防有人在我的应用程序中看到代码存在问题(使用gevent.sleep(seconds)?),这意味着代码早就适用,但迟早会破坏。

+0

我有完全相同的错误。 PyCharm 2016.1.4按预期工作。 – scooterman

回答

3

发表Elizaveta Shashkova在PyCharm问题跟踪在https://youtrack.jetbrains.com/issue/PY-20183该解决方案为我工作:

的新功能已经出现在PyCharm:断点线程挂起政策。你应该去运行|查看断点,选择断点并更改其线程挂起策略:“线程”或“全部”。您也可以为所有断点设置默认策略。

将暂停策略从“全部”更改为“线程”后,调试器不再突破我的断点,也不会抛出BlockingSwitchOutError

而且,重:

而且你有没有设置 “GEVENT兼容” 开启? https://www.jetbrains.com/help/pycharm/2016.1/python-debugger.html

不,我没有这个打开,我固定我的问题,而不将其打开。但是如果将来我有类似的问题,会尝试开启它。