Locking di file
Up to Table of Contents
Ecco un semplice script Python di esempio pronto per l'uso:
def parallelo(pid=None):
f=open("prova.txt", 'w')
fcntl.flock(f.fileno(), fcntl.LOCK_EX)
### start zona protetta ###
try:
if pid:
print "Sono il padre"
... write sul file ...
else:
print "Sono il figlio"
from time import sleep
sleep(2)
... write sul file ...
### end zona protetta ####
finally:
f.close()
import fcntl
import os
pid = os.fork()
parallelo(pid)
Per evitare comportamenti non deterministici dobbiamo proteggere da accessi simultanei la scrittura del file. In questo caso creiamo una zona di mutua esclusione (evidenziata dai commenti) tramite la chiamata flock. Inoltre è opportuno inserire un costrutto try/finally in quanto se nella zona condivisa si generasse un'eccezione, tutti i processi rimarrebbero bloccati indefinitamente.
Eventualmente questa può anche essere una tecnica per sincronizzare dei processi in mutua esclusione utilizzando un file, anzichè adoperare semafori o altro; oppure magari in Zope/Plone può essere utile nel caso di debba serializzare una serie di operazioni da eseguirsi ciascuna in mutua esclusione.