Я пытаюсь сделать приведенный ниже код асинхронным:
import asyncio
import random
async def count():
l = []
for i in range(10000000):
l.append(i)
return random.choice(l)
async def long_task1():
print('Starting task 1...')
task_output = await count()
print('Task 1 output is {}'.format(task_output ))
async def long_task2():
print('Starting task 2...')
task_output = await count()
print('Task 2 output is {}'.format(task_output ))
async def main():
await asyncio.gather(long_task1(), long_task2())
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
В настоящее время он будет работать синхронно.
Это потому, что в функции count
отсутствует оператор await
?
Я попытался переделать функцию, чтобы включить await
:
async def count():
l = []
for i in range(10000000):
l.append(i)
choice = await random.choice(l)
return choice
и он запустится асинхронно (и Starting task 1...
, и Starting task 2...
будут напечатаны один за другим), но затем я получаю сообщение об ошибке:
TypeError: объект int нельзя использовать в выражении 'await'
Я понимаю, что ошибка произошла, потому что результат random.choice(l)
не является ожидаемым (сопрограммой), но я не знаю, как это исправить, не бегая по кругу. Нужно ли мне как-то рефакторировать цикл for в программу самостоятельно?