Попытка создать функцию asyn c magi c с помощью @ register_line_magi c, в конце концов я буду вынужден ждать sayncio.sleep для aioredis, и я хочу, чтобы она блокировалась. Я попытался заменить строку res = await printit("5")
на res = await asyncio.create_task(printit("5"))
, но в обоих случаях получаю результат ниже. Как мне напечатать print(l)
на интерактивной оболочке?
Текущий вывод:
In [1]: resume
Out[1]: <coroutine object setup.<locals>.resume at 0x2abe42504680>
Ожидаемый вывод:
In [1]: resume
Out[1]: 5
Весь тестовый код:
import sys
import asyncio
from IPython.core.magic import register_line_magic
from IPython import start_ipython, get_ipython
from traitlets.config import Config
async def printit(l):
await asyncio.sleep(10)
print(l)
def setup():
@register_line_magic
async def resume(line):
res = await printit("5")
async def main(ars):
iconfig = Config()
iconfig.InteractiveShellApp.exec_lines = [
"Setup()",
]
iconfig.TerminalIPythonApp.display_banner = False
Setup = setup
await asyncio.create_task(start_ipython(argv=[], user_ns=locals(), config=iconfig))
if __name__ == "__main__":
loop = asyncio.get_event_loop()
main_task = loop.create_task(main())
loop.run_forever()