Идемпотентные задачи: file locking для защиты от дублей

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

pythonfile-lockingcron

👁 В автоматизации (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 #автоматизация #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX

Скриншот кода на тёмном фоне: пример Python с использованием fcntl.flock для эксклюзивной блокировки файла в автоматизации.
Пример кода из поста: использование fcntl.flock в Python для предотвращения одновременных запусков задач.

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