← retour aux snippets

fcntl.flock: verrou de fichier (Unix)

Synchroniser l'accès à un fichier entre processus via flock (advisory).

python filesystem #fcntl#flock#lock

objectif

Synchroniser l’accès à un fichier entre processus via flock (advisory).

code minimal

import os, tempfile, sys
if os.name == "posix":
    import fcntl  # Unix seulement
    with tempfile.NamedTemporaryFile() as f:
        fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
        print(True)  # attendu: True
else:
    print(True)  # plate-forme non Unix

utilisation

import os, tempfile
if os.name == "posix":
    import fcntl
    with tempfile.NamedTemporaryFile() as f:
        fcntl.flock(f, fcntl.LOCK_SH)  # lecture partagée
        fcntl.flock(f, fcntl.LOCK_UN)  # libérer
    print(True)
else:
    print(True)

variante(s) utile(s)

import os
print(os.name in ("posix","nt"))

notes

  • flock est coopératif (advisory) et spécifique Unix.
  • Sur Windows, utilisez msvcrt.locking ou un lockfile O_EXCL.