Notez que j'ai étudié comment contrôler les fichiers exclusifs entre les processus en Python. Il y a un lockfile dans le document
This package is deprecated. It is highly preferred that instead of using this code base that instead
fasteners
oroslo.concurrency
is used instead.
Puisqu'il y en a, essayez d'utiliser des attaches.
Il est situé dans PyPI donc il est facile à installer avec pip
:
pip install fasteners
Parmi les Exemples dans le document, cette fois le verrou interprocessus Je vais essayer. Il existe une méthode d'utilisation de «avec» et une méthode pour en faire un décorateur.
import os
import time
import fasteners
def main():
pid = os.getpid()
while True:
print("Waiting...")
with fasteners.InterProcessLock('/tmp/tmp_lock_file'):
print('Locked by {}'.format(pid))
time.sleep(2)
time.sleep(1)
if __name__ == '__main__':
main()
La partie à l'intérieur de «avec» est exécutée exclusivement.
import os
import time
import fasteners
@fasteners.interprocess_locked("/tmp/tmp_lock_file")
def action_with_lock():
pid = os.getpid()
print("{} has a lock".format(pid))
time.sleep(1)
if __name__ == '__main__':
action_with_lock()
Cliquez ici si vous souhaitez exécuter une fonction exclusivement.
Les deux sont faciles à mettre en œuvre.
C'est pratique car il n'est pas nécessaire de créer / tmp / tmp_lock_file
à l'avance.
Recommended Posts