у меня есть функция, которая проводит запись в бд, но по прошествии нескольких секунд после запуска первой мне нужно запустить другую функцию, чтобы она ещё раз изменила запись в бд. как это реализуется правильно? чтобы при этом не блокировалась программа? в отдельный процесс? в корутину? в отдельный тред? чо почитать? подскажите
по таймеру запустить? Или просто ты ожидаешь что через несколько секунд у тебя может возникнуть такая необходимость?
не, по таймеру с точно заданным числом секунд, но надо так чтобы пока таймер тикает другие функции вызываться могли
Звучит как тред, если у тебя нет асинка
До сих пор не было)
если ты намекаешь на await asyncio.sleep(n), то это не особо поможет, у тебя может быть другая блокирующая корутина которая > n секунд не возвращает управление эвент лупу, проще говоря asyncio.sleep гарантирует что эвент луп вернет управление твоему коду через >= n секунд
как вариант, в первой функции поставить таску селери с выполнением второй функции с delay в нужное количество секунд 🫠
Зависит от того, какие нужны гарантии. Если можно продолбать пару задач при перезагрузке приложения, то: - если у тебя асинк, то создай таску, в которой будет asyncio.sleep - если треды, то создай тред, в котором будет time.sleep Если тебе нужны гарантии и пропустить таску будет больно, то можешь записывать задачу в БД, которую будет полить другой сервис и класть в очередь. Забыл как называется паттерн, недавно тут в чате мелькал
не, в бд не критично класть попробую через треды
А можно прервать исполнение таски такой? По какому нибудь условию
Можешь проверить в самой таске после слипа
можно сделать более гранулярные слипы for i in range(n): time.sleep(1) if is_cancelled: return
Обсуждают сегодня