👁 В продакшн-скриптах часто встречаются фоновые задачи или воркеры, которые могут зависнуть из-за внешних API или багов. Если их не контролировать, процесс может висеть часами, блокируя очередь или ресурсы. Можно автоматизировать мониторинг и безопасный рестарт таких задач с помощью watchdog и subprocess.
📝 Автоматический перезапуск зависшей функции с тайм-аутом
import subprocess
import time
def run_task():
# Здесь любая долгоживущая задача
subprocess.run(["python3", "worker.py"], check=True, timeout=10)
while True:
try:
run_task()
except subprocess.TimeoutExpired:
print("Задача зависла, перезапуск...")
continue
except subprocess.CalledProcessError as e:
print(f"Задача завершилась с ошибкой: {e}, перезапуск...")
continue
time.sleep(1)📌 Как это работает:
subprocess.runсtimeoutгарантирует, что зависшие процессы будут автоматически завершены.- Исключения
TimeoutExpiredиCalledProcessErrorпозволяют контролировать поведение и безопасно перезапустить задачу. - Такой подход удобен для автоматизации периодических воркеров, ETL-задач или фоновых процессов без использования внешнего менеджера задач.
❗️ В продакшн-автоматизации важно не просто запускать скрипты, а контролировать их выполнение. Такой метод защищает от зависаний и экономит ресурсы сервера, особенно при параллельных воркерах и критичных задачах.
tags: #python #автоматизация #разработка



