Pythonデバッガー内でawait
関数への任意の呼び出しをasync
することは可能ですか?
いくつかの_main.py
_ファイルに次のコードがあるとします。
_import asyncio
async def bar(x):
return x + 1
async def foo():
import ipdb; ipdb.set_trace()
asyncio.run(foo())
_
次に、デバッガー内で引数を指定してbar()
を呼び出してテストし、結果をテストします。次のことが起こります。
_$ python3 main.py
> /Users/user/test/main.py(8)foo()
7 import ipdb; ipdb.set_trace()
----> 8 return None
9
ipdb> bar(1)
<coroutine object bar at 0x10404ae60>
main.py:1: RuntimeWarning: coroutine 'bar' was never awaited
import asyncio
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
ipdb> await bar(1)
*** SyntaxError: 'await' outside function
_
もちろん、私はx = await bar(1)
をipdb.set_trace()
の上に置いて結果を検査することでこれを回避できますが、デバッガーが動作しているときにリアルタイムで関数を呼び出すことはできませんアクティブ。
Python 3.8 以降、この機能のサポートが増え始めているようです。特に、この問題を見てください bpo-37028
あなたがまだPython 3.7を使用している場合は、多分 aiomonitor がこの機能をある程度サポートしている可能性があります。