Python async function
3дрaвствyйте, начал читать про асинхронность, но возник вопрос.
В первом случаем мне нужно запустить 2 цикла в разных потоках, во втором нужно получить return асинхронной функции.
import asyncio
async def test():
while True:
print(0)
await asyncio.sleep(1)
async def main():
asyncio.ensure_future(test())
while True:
print(1)
await asyncio.sleep(1)
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Код выше запустит 2 цикла в разных потоках, но через asyncio.ensure_future() нельзя получить return, то есть следующий код не сработает.
import asyncio
async def test():
return 1
async def main():
print( asyncio.ensure_future(test()))
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Поэтому я ищу функцию которая сможет запустить функцию в отдельном потоке, как asyncio.ensure_future() но что бы можно было получить return от функции
Ответы (1 шт):
Чтобы получить результат работы асинхронной функции, используйте await:
async def main():
print(await asyncio.ensure_future(test()))
^^^^^
Вывод:
1
Вы получаете из асинхронной функции задачу Task, чтобы дождаться результата её работы и получить результат нужен await.
Вы так и делаете в первом примере кода, просто вас там не интересует результат работы функций, а только их завершение. Но await используется в обоих случаях - и когда нужно просто вызвать асинхронную функцию, и когда от неё нужно получить результат.
P.S. Попробовал в Google Colab, а вроде даже и так работает:
print(await test())