You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH远程Ubuntu机器按住按键时IPython崩溃问题求助

问题:SSH远程连接下IPython长按按键崩溃,提示无法创建新线程

问题现象

  • 通过SSH连接到Ubuntu 18.04.2 LTS机器,启动IPython会话后,只要长按按键(比如退格键)约半秒,IPython就会直接崩溃
  • 崩溃后进入异常bash环境:按键输入无法显示,但能正常执行ls、man、pwd、ipython等命令,只能通过先按Ctrl+D再按Ctrl+C来终止会话,根本没法执行%tb这类调试命令

崩溃时的错误堆栈

File "/home/zach/local/anaconda3/bin/ipython", line 11, in <module> sys.exit(start_ipython())
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/IPython/__init__.py", line 125, in start_ipython return launch_new_instance(argv=argv, **kwargs)
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/traitlets/config/application.py", line 658, in launch_instance app.start()
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/IPython/terminal/ipapp.py", line 356, in start self.shell.mainloop()
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/IPython/terminal/interactiveshell.py", line 498, in mainloop self.interact()
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/IPython/terminal/interactiveshell.py", line 481, in interact code = self.prompt_for_code()
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/IPython/terminal/interactiveshell.py", line 410, in prompt_for_code **self._extra_prompt_options())
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/shortcuts/prompt.py", line 738, in prompt return run_sync()
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/shortcuts/prompt.py", line 727, in run_sync return self.app.run(inputhook=self.inputhook, pre_run=pre_run2)
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/application/application.py", line 709, in run return run()
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/application/application.py", line 682, in run run_until_complete(f, inputhook=inputhook)
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/eventloop/defaults.py", line 123, in run_until_complete return get_event_loop().run_until_complete(future, inputhook=inputhook)
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/eventloop/posix.py", line 66, in run_until_complete self._run_once(inputhook)
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/eventloop/posix.py", line 85, in _run_once self._inputhook_context.call_inputhook(ready, inputhook)
File "/home/zach/local/anaconda3/lib/python3.7/site-packages/prompt_toolkit/eventloop/inputhook.py", line 78, in call_inputhook threading.Thread(target=thread).start()
File "/home/zach/local/anaconda3/lib/python3.7/threading.py", line 847, in start _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

已排查的情况

  • 不是Python本身的问题:直接启动Python交互环境,长按按键完全正常
  • 换IPython版本/安装源没用:不管用Anaconda自带的IPython,还是系统的/usr/bin/ipython,问题都存在;重装Anaconda也解决不了,但同版本Ubuntu的另一台全新安装Anaconda的机器完全没这个问题
  • 初步怀疑:从报错看是线程创建耗尽,推测IPython的事件循环可能给每个按键事件都创建新线程,长按按键时短时间生成大量线程,超出系统限制;这个问题和IPython文档里提到的OS X下按方向键崩溃的情况很类似
  • 确认过没有其他程序占用大量线程

解决思路

我给你几个可以尝试的方案,按顺序试就行:

  1. 禁用IPython的inputhook:启动IPython时加上--no-inputhook参数,也就是执行ipython --no-inputhook,这个参数可以禁用prompt_toolkit的输入钩子,避免它创建过多线程
  2. 调整终端环境变量:试试修改TERM变量,比如先执行export TERM=xterm-256color,再启动IPython;有些时候SSH连接的终端类型不兼容会导致按键事件处理异常
  3. 调整prompt_toolkit版本:报错出在prompt_toolkit的线程创建部分,你可以试试安装和IPython 7.5.0兼容的旧版本prompt_toolkit,比如执行pip install prompt_toolkit==2.0.10,或者升级到最新的兼容版本
  4. 检查系统线程限制:执行ulimit -u查看当前用户的最大进程/线程数,如果数值比较低(比如1024),可以临时调高试试:ulimit -u 4096,再启动IPython测试
  5. 收集信息提交bug:如果上面的方法都没用,你可以启动IPython时加上--Application.verbose_crash=True参数,获取更详细的崩溃日志,然后提交给IPython的官方团队

内容的提问来源于stack exchange,提问作者Zach Boyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:57:19