Запустите асинхронную функцию из функции синхронизации в Python [закрыто]Python

Программы на Python
Anonymous
Запустите асинхронную функцию из функции синхронизации в Python [закрыто]

Сообщение Anonymous »

В моем приложении Python у меня есть функция синхронизации boo(), которая вызывается внутри цикла выполнения событий. boo() должен получить некоторые данные из foo(arg1, arg2), которая является async функцией.
К сожалению, Я не могу превратить boo() в асинхронную функцию. Он должен оставаться синхронизированным. (Это ограничение не в моих руках).
Как мне вызвать foo(arg1, arg2) из boo(), дождаться завершения, и продолжить выполнение?
Я пытался это сделать

Код: Выделить всё

data = asyncio.run(foo(arg1, arg2))
Но возникло следующее исключение:

Код: Выделить всё

  File "/root/.pycharm_helpers/pydevd_asyncio/pydevd_nest_asyncio.py", line 143, in run
loop.run_until_complete(task)
File "uvloop/loop.pyx", line 1511, in uvloop.loop.Loop.run_until_complete
File "uvloop/loop.pyx", line 1504, in uvloop.loop.Loop.run_until_complete
File "uvloop/loop.pyx", line 1377, in uvloop.loop.Loop.run_forever
File "uvloop/loop.pyx", line 518, in uvloop.loop.Loop._run
RuntimeError: this event loop is already running.
Я тоже пробовал:

Код: Выделить всё

loop = asyncio.get_event_loop()
data = loop.run_until_complete(foo(arg1, arg2))
И:

Код: Выделить всё

data = asyncio.run_in_executor(None, foo, arg1, arg2)
Все они выдавали одинаковые ошибки выполнения

Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-python

Вернуться в «Python»