os.lockf() în Python

Descriptori de fișiere (os) Python 3.3+ (Unix)

Blochează o porțiune dintr-un fișier, ca alte procese să nu o folosească în același timp.

Sintaxă
os.lockf(fd, comanda, lungime)

Ce face os.lockf()

lockf() pune, verifică sau scoate un blocaj pe o porțiune a fișierului, de la poziția curentă, pe lungime octeți (0 = până la final). Comenzile sunt F_LOCK (blochează, așteptând dacă e nevoie), F_TLOCK (încearcă, fără așteptare), F_TEST (verifică) și F_ULOCK (deblochează). Blocajele sunt „consultative”: funcționează doar între programe care le respectă.

Parametri

Parametru Descriere
fd Descriptorul (deschis pentru scriere).
comanda F_LOCK, F_TLOCK, F_TEST, F_ULOCK.
lungime Numărul de octeți blocați.

Ce returnează

None.

Exemple

Exemplul 1: O singură instanță a programului

import os
fd = os.open("app.lock", os.O_RDWR | os.O_CREAT)
os.lockf(fd, os.F_TLOCK, 0)
print("Am obținut blocajul", flush=True)
pid = os.fork()
if pid == 0:
    fd2 = os.open("app.lock", os.O_RDWR)
    try:
        os.lockf(fd2, os.F_TLOCK, 0)
    except OSError:
        print("Copilul: altă instanță rulează", flush=True)
    os._exit(0)
os.waitpid(pid, 0)
os.lockf(fd, os.F_ULOCK, 0)
os.close(fd)

Rezultat

Am obținut blocajul
Copilul: altă instanță rulează

Greșeli frecvente

  • Te aștepți ca blocajul să oprească orice program să scrie în fișier. Programele care nu apelează lockf îl ignoră.

Comenzi înrudite