Здравствуйте!
Имеется код:
import asyncio
from random import randint
async def worker():
if condition == False:
return False
await asyncio.sleep(randint(1,3))
return True
Как данный код запускать асинхронно до бесконечности, но с контролем количества одновременных выполнений?
Имею ввиду что функция после выполнения - завершается, и сразу вызывается снова эта же функция. Так же идет обработка большого массива данных, и необходимо как то контролировать количество одновременно запущенных функций(например 10). Рекурсия не вариант, т.к. будут утечки памяти. Если функция возвращает False, то количество одновременных выполнений будет уже не 10, а 9, и так пока все функции не завершат правильно работу. Есть ли какой то модуль для такой реализации?
С потоками это достаточно просто - в каждом потоке открывается бесконечный цикл while True и все, но я так понимаю такой подход в асинхронном программирование не верен, как сделать правильно?
Добавлено:
Самое простое, это реализовать вот так:
import asyncio
from random import randint
async def worker(i):
while True:
await asyncio.sleep(randint(1,3))
print(f'Worker #{i}')
loop = asyncio.get_event_loop()
futures = [loop.create_task(worker(str(i))) for i in range(5)]
loop.run_forever()
но я не уверен насколько правильно асинхронную функцию пускать в бесконечный цикл