Запуск интерактивной оболочки I Python из pudb внутри сопрограммы завершается неудачно - PullRequest
0 голосов
/ 03 апреля 2020

Мне действительно нравится pudb и в сочетании с I Python Я успешно отлаживаю python код уже много лет.

Большинство из время, когда эта комбинация просто работает, например,

# test1.py
import time

def do_something():
    import pudb
    pudb.set_trace()

    sleep(1)
    return 1

do_something()

Если вы выполните python test1.py, запускается pudb, а когда вы нажимаете !, интерактивная оболочка I Python запускается без проблем.

Однако если вы установите трассировку внутри подпрограммы, pudb запускается без проблем, вы даже можете без проблем войти в await some_async_call() вызов. Но если вы хотите запустить интерактивную оболочку и нажать !, то весь сеанс прерывается с ошибкой. Пример Fox:

# test2.py
import asyncio

async def do_something():
    import pudb
    pudb.set_trace()

    await asyncio.sleep(1)

    return 1

asyncio.run(do_something())
$ python test2.py

pudb starts and halts before await asyncio.sleep(1), now press !

Hit Ctrl-D to return to PuDB.

In [1]:
Traceback (most recent call last):
  File "test2.py", line 11, in <module>
    asyncio.run(do_something())
  File "/home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/asyncio/base_events.py", line 599, in run_until_complete
    self.run_forever()
  File "test2.py", line 7, in do_something
    await asyncio.sleep(1)
  File "test2.py", line 7, in do_something
    await asyncio.sleep(1)
...
  File "/home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/asyncio/base_events.py", line 554, in run_forever
    raise RuntimeError('This event loop is already running')
RuntimeError: This event loop is already running
Task was destroyed but it is pending!
task: <Task pending name='Task-5' coro=<Renderer.wait_for_cpr_responses.<locals>.wait_for_timeout() running at /home/shaoran/anaconda/py3/envs/ivct/lib/python3.8/site-packages/prompt_toolkit/renderer.py:505> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fe05cd42fd0>()]>>

Я подозреваю, что это проблема I Python, потому что если я изменю оболочку с I Python на b python и нажмите !, после чего интерактивная оболочка b python запустится без проблем. Я искал решение этой проблемы, но мне кажется, что я не могу найти ничего, что могло бы помочь, мне удалось найти эти проблемы / запрос на получение запросов на github # 12028 , # 12140 и # 12141 , что, похоже, связано с этим, но я не знаю, так ли это и были ли они выпущены.

Так что мой вопрос Кто-нибудь может воспроизвести эту ошибку? Это ошибка pudb или ipython?

Я использую python 3.8.1, установленный из anaconda 4.8.3 (linux 64bit) и IPython 7.13.0 (установленный с conda install ipython -c conda-forge, но такой же применяется при установке через pip).

...