Ich wollte mit Python einfach die exklusive Kontrolle zwischen Prozessen haben, deshalb habe ich es mit einer Sperrdatei implementiert. Die Umgebung, die wir überprüfen, ist wie folgt.
--mac (OS X El Capitan Version 10.11.5) --pip verfügbar
Eine Bibliothek, die eine Sperrdatei mit dem angegebenen Namen erstellt und diese ausschließlich steuert. Da es von pid verwaltet wird, wird der exklusive Status beim Beenden des gesperrten Prozesses freigegeben, ohne geschlossen zu werden, sodass es auch dann einfach zu handhaben ist, wenn eine Ausnahme auftritt. Ich denke. Unten wie gewohnt installieren
$ pip install zc.lockfile
Es gibt keine besondere Bedeutung, aber es wird mit einem Dekorateur implementiert. Es kann nicht verwendet werden, wenn Sie den gesperrten Prozess ordnungsgemäß verarbeiten möchten (z. B. Ausgabe eines Protokolls oder Warten). Für diejenigen, die sowieso exklusive Kontrolle wollen.
lock.py
# -*- coding: utf-8 -*-
import sys
from zc import lockfile
from zc.lockfile import LockError
def lock_or_through(func):
'''Exklusiver Kontrolldekorateur per Sperrdatei
Durch den Prozess selbst, wenn gesperrt
'''
def lock(*args, **kwargs):
lock = None
try:
lock = lockfile.LockFile('lock')
except LockError:
print("locked")
return
func(*args, **kwargs)
#Wenn die Ziel-PID nicht gültig ist, wird sie nicht gesperrt, sodass praktisch kein Problem besteht, selbst wenn eine Ausnahme auftritt.
lock.close()
return lock
@lock_or_through
def main(sys_argv):
"""Verarbeitung, die Sie ausschließlich mit einer Sperrdatei steuern möchten"""
print('process you need')
if __name__ == '__main__':
main(sys.argv)
Recommended Posts