Bookmark and Share
Document Actions

Locking di file

Up to Table of Contents

Può capitare di avere diversi processi concorrenti che devono accedere in scrittura ad un file. Vediamo come creare una zona protetta ad accesso esclusivo.

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.

by Davide Moro last modified 2007-07-09 16:48
 

Supporto

Ottieni un
aiuto veloce e mirato sul forum, gratis!

partecipa al forum

 

Segui le icone

 

Livelli di difficoltà

livello guruSolo per i "guru"!
livello avanzatoPer configuratori e sviluppatori
livello medioPer chi ha già familiarità
livello basePer tutti!

 

I video

video

Il documento è supportato da un video!