Как безопасно перезапускать падающие задачи без Celery

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

pythonconcurrent.futuresфоновые задачи

👁 В проде часто нужно запускать фоновую задачу или сервис, который может упасть. Например, сканер очереди, обработчик событий или простой демон.

📝 Вместо костылей и бесконечных while True, можно использовать встроенный concurrent.futures с авто-рестартом задач:

import time
from concurrent.futures import ThreadPoolExecutor

def worker():
    while True:
        print("Задача работает...")
        time.sleep(5)
        raise Exception("Ошибка!")  # тестим падение

with ThreadPoolExecutor(max_workers=1) as executor:
    while True:
        future = executor.submit(worker)
        future.result()  # дождёмся падения и перезапустим

🔎 Что происходит:

  • Задача запускается в потоке
  • При падении future.result() выбрасывает исключение
  • Цикл перехватывает его и перезапускает задачу — без внешних обёрток

📌 Зачем нужно:

  • Устойчивые фоновые процессы без зависимостей
  • Подходит для микросервисов, CLI-инструментов, демонов
  • Можно легко адаптировать под асинхронный код или процессы через multiprocessing

❗️ Такой шаблон — альтернатива громоздким фреймворкам, особенно когда нужно просто «держать живым» кусок кода.

tags: #python #разработка

❤️ @recura_tech

Тёмный слайд с логотипом RECURA и фрагментом Python‑кода (ThreadPoolExecutor), демонстрирующим авто‑рестарт фоновой задачи в потоке.
Слайд с примером кода для перезапуска задач через ThreadPoolExecutor.

Читайте так же