【问题标题】:BlockingSwitchOutError in debugger after upgrading to PyCharm 2016.2升级到 PyCharm 2016.2 后调试器中的 BlockingSwitchOutError
【发布时间】:2016-07-25 01:46:49
【问题描述】:

从 PyCharm 2016.1.4 升级到 2016.2 后,在运行调试器并设置任何断点时,PyCharm 在我没有设置断点的各个地方停止,并将其记录到 stderr:

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 。但是也在这里发帖,以防有人发现我的应用程序中的代码有问题(gevent.sleep(seconds) 的使用?),这意味着代码之前碰巧可以工作,但迟早会坏掉。

【问题讨论】:

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

标签: python debugging pycharm


【解决方案1】:

Elizaveta Shashkova 在 PyCharm 问题跟踪器 https://youtrack.jetbrains.com/issue/PY-20183 上发布的解决方案对我有用:

PyCharm 中出现了新特性:断点线程挂起策略。你应该去跑步 |查看断点,选择断点并更改其线程挂起策略:“线程”或“全部”。您还可以为所有断点设置默认策略。

将挂起策略从“All”更改为“Thread”后,调试器不再中断我的断点,也不再抛出 BlockingSwitchOutError。

然后,回复:

您是否还开启了“gevent compatible”设置? https://www.jetbrains.com/help/pycharm/2016.1/python-debugger.html

不,我没有打开它,我在没有打开它的情况下解决了我的问题。但是如果我以后有类似的问题会尝试打开它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2021-10-25
    • 2016-12-07
    • 2016-03-28
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多