👁 В автоматизации (cron, воркеры, CI-джобы) частая проблема — повторный запуск одной и той же задачи. В итоге получаешь дубли: повторные записи, повторные API-вызовы, гонки за ресурсы. Нужно делать задачи идемпотентными и защищать их через файловые блокировки.
📝 Гарантия единственного запуска через file lock
import fcntl
import time
lock_file = open('/tmp/my_task.lock', 'w')
try:
fcntl.flock(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)
print("Задача запущена")
time.sleep(10) # имитация работы
finally:
fcntl.flock(lock_file, fcntl.LOCK_UN)
lock_file.close()📌 Как это работает:
flockсLOCK_EX | LOCK_NBпытается взять эксклюзивную блокировку без ожидания.- Если другой процесс уже держит лок — текущий запуск сразу завершится (или можно обработать это как retry).
- Блокировка снимается автоматически при завершении процесса, что защищает от зависших локов.
❗️ В автоматизации идемпотентность — это не «на будущее», а защита от реальных прод-багов. Без блокировок даже простой cron может легко превратиться в источник дублей и гонок.
tags: #python #автоматизация #разработка



