@jslby

Как бесконечно запустить функцию в Python?

Здравствуйте!
Имеется код:
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()

но я не уверен насколько правильно асинхронную функцию пускать в бесконечный цикл
  • Вопрос задан
  • 1851 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы