Что было бы хорошим подходом к выполнению двух асинхронных циклов, работающих параллельно в Python, используя async/await
?Две независимые асинхронные петли в Python
Я подумал о чем-то вроде кода ниже, но не могу обернуть вокруг себя, как использовать async
/await
/EventLoop
в данном конкретном случае.
import asyncio
my_list = []
def notify():
length = len(my_list)
print("List has changed!", length)
async def append_task():
while True:
time.sleep(1)
await my_list.append(random.random())
notify()
async def pop_task():
while True:
time.sleep(1.8)
await my_list.pop()
notify()
loop = asyncio.get_event_loop()
loop.create_task(append_task())
loop.create_task(pop_task())
loop.run_forever()
Ожидаемый результат:
$ python prog.py
List has changed! 1 # after 1sec
List has changed! 0 # after 1.8sec
List has changed! 1 # after 2sec
List has changed! 2 # after 3sec
List has changed! 1 # after 3.6sec
List has changed! 2 # after 4sec
List has changed! 3 # after 5sec
List has changed! 2 # after 5.4sec
Так что выход вы получаете взамен? 'BaseEventLoop' не является конкретной реализацией цикла; используйте 'asyncio.get_event_loop()', чтобы получить конкретный цикл для вашей платформы. –
Кроме того, операции 'list' не ожидаются. 'time.sleep()' не будет уступать другим сопрограммам. –