я создаю таску которая раз в N времени что-то стягивает, но перестаёт работает reload и приложение фризится, как это пофиксить?
Сама таска:
async def task():
while True:
await collect_data()
await asyncio.sleep(1)
Найс таска
В fastapi_utils.tasks есть repeat_every декоратор, и тебе не нужен вайл тру со слипом.
Я бы на твоём месте подумал про селери
Ну просто поедставь, что у тебя твоя таска ивент луп весь сожрёт, и не отдаст никогда
а там можно запускать каждые 0,5 секунд например, в доке найти не могу
Если смущает строчка дальше, то тебе действительно нужно распараллеливание process-based, как выше предлагали, через селери
да я уверен, что есть другое решение под капотом. У нас же условно есть asyncio.call_later, я полагаю, что есть что-то похожее но не требующее рекурсии, celery тут не надо
В таком случае, нужно быть уверенным, что collect_data не станет боттл-неком
так там под капотом тот же самый while True)
Обсуждают сегодня