Question

J'ai une question sur la façon dont fonctionne flock(), en particulier en python. J'ai un module qui ouvre une connexion série (via os.open()). Je dois faire ce coffre-fort de fil. Il est assez facile en fait threadsafe lorsque l'on travaille dans le même module en utilisant threading.Lock(), mais si le module sont importées de différents endroits, il se casse.

Je pensais à l'aide flock(), mais je vais avoir du mal à trouver suffisamment d'informations sur la façon dont le troupeau exactement œuvres. Je lis ce troupeau () déverrouille le fichier une fois que le fichier est fermé. Mais est-il une situation qui gardera le fichier ouvert si plantages python?

Et ce qui est autorisé à utiliser exactement le fichier verrouillé si LOCK_EX est réglé? Juste le module qui a verrouillé le fichier? Tout module qui a été importé à partir du script qui a été initialement exécuté?

Était-ce utile?

La solution

Quand un processus meurt le système d'exploitation devrait nettoyer toutes les ressources de fichiers ouverts (avec quelques mises en garde, je suis sûr). En effet, le verrou consultatif est libéré lorsque le fichier est fermé, une opération qui se produit dans le cadre du nettoyage du système d'exploitation lorsque les sorties de processus python.

Rappelez-vous, troupeau (2) est simplement conseil:

  

Les verrouillages permettent processus coopératifs pour effectuer des opérations cohérentes sur les fichiers, mais [les autres, mal comportés] processus peuvent encore accéder à ces fichiers sans utiliser les verrous consultatifs.

flock (2) met en œuvre un readers- serrure écrivain. Vous ne pouvez pas affluer le même fichier deux fois avec LOCK_EX, mais un certain nombre de personnes peuvent affluer avec LOCK_SH simultanément (aussi longtemps que personne d'autre n'a un LOCK_EX dessus).

  

Le mécanisme de verrouillage permet deux types de serrures: verrous partagés et verrous exclusifs. A tout moment plusieurs verrous partagés peuvent être appliqués à un fichier, mais à aucun moment sont multiples exclusif, ou les deux partagés et exclusifs, serrures autorisés simultanément sur un fichier.

troupeau fonctionne au niveau OS / processus et est indépendant des modules de python. Un module peut demander n serrures, ou n serrures pourraient être demandées dans m modules. Cependant, un seul processus peut contenir un verrou LOCK_EX sur un fichier donné à un moment donné.

YMMV sur un système "non UNIX" ou un système de fichiers non local.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top