Сбой IPython, когда я держу любую клавишу - PullRequest
0 голосов
/ 30 мая 2019

Когда я запускаю ssh на определенном удаленном компьютере и запускаю сеанс IPython, он зависал каждый раз, когда я удерживаю клавишу в течение примерно половины секунды (например, клавишу возврата).

Вывод ошибки вставляется ниже:

  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

If you suspect this is an IPython bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at ipython-dev@python.org

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    %config Application.verbose_crash=True

Это приводит меня к неудачному сеансу bash, где мои нажатия клавиш не отображаются на экране, хотя я могу выполнять такие команды, как ls, man, pwd, ipython и т. Д. Я могу уничтожить только сеанс bashнажав Control D, а затем Control C. В частности, сообщение о том, что я нажимаю% tb и т. д., невозможно.

Другие программы не конкурируют за потоки.Просматривая ошибку, похоже, что цикл обработки событий, возможно, пытается создать поток для обработки каждого нажатия клавиши, и это в конечном итоге приводит к ошибке выделения большего количества потоков.Кажется немного надуманным, что это может быть проблемой, так как удерживание клавиши - это, безусловно, ожидаемое поведение.

Это кажется потенциально похожим на проблему https://ipython.org/faq.html#ipython-crashes-under-os-x-when-using-the-arrow-keys.

Кажется, небыть проблемой Python как таковой, так как, если я использую Python, а не IPython, проблема исчезнет.Сначала я использовал Anaconda ipython, но также переключился на системный ipython в / usr / bin / ipython с теми же результатами.Также пробовал чистую установку Anaconda, с той же проблемой.Также попробовал новую установку Anaconda на другую машину с той же ОС, и проблема не возникла.

Я ищу идеи для решения этой проблемы.Любые идеи приветствуются, и я буду публиковать последующие данные, если необходимо.

Python 3.7.3 (по умолчанию, 27 марта 2019, 22:11:17) IPython 7.5.0 Ubuntu 18.04.2 LTS

1 Ответ

0 голосов
/ 31 мая 2019

Это исправлено сейчас, но все еще несколько загадочно для меня. Я следил за трассировкой стека вплоть до CPython до вызовов библиотеки pthreads. В документации по pthreads указано, что ошибка может возникать по существу только в том случае, если в куче недостаточно памяти или выделено максимальное количество потоков. Я использовал ulimit, чтобы установить неограниченную виртуальную память для каждого процесса (это было ~ 3 ГБ). Это решило проблему.

Так что, по-видимому, ограничение виртуальной памяти мешало выделению потока. Очевидное решение состоит в том, что требовалось больше памяти, хотя трудно поверить, что для ответа на нажатие клавиши требуется более 3 ГБ. Другая возможность состоит в том, что количество, выделяемое на поток, является функцией ограничения виртуальной памяти - я помню нечто подобное в документации по pthreads, хотя это было немного выше моей головы.

...