Cron i zc.lockfile
Musiałem dzisiaj napisać skrypt, który odpalał się co minutę poprzez crona i mogło się zdarzyć, że będzie wykonywał się trochę dłużej niż jedna minuta. Dlatego też, trzeba było wymyślić jakiś mechanizm, który by mnie uchronił przed odpaleniem skryptu kolejny raz, gdy ten jeszcze się nie wykonał.
Jak działa zc.lockfile? Krótki opis:
Ja go użyłem w następujący sposób, w skrypcie zdefiniowałem odpowiednią funkcję, a pod jego koniec dodałem:
Z pomocą przyszedł mi moduł zc.lockfile. Instalujesz go normalnie poprzez pipa:
pip install zc.lockfile
Jak działa zc.lockfile? Krótki opis:
The zc.lockfile package provides a basic portable implementation of interprocess locks using lock files. The purpose if not specifically to lock files, but to simply provide locks with an implementation based on file-locking primitives. Of course, these locks could be used to mediate access to other files. For example, the ZODB file storage implementation uses file locks to mediate access to file-storage database files. The database files and lock file files are separate files.
Ja go użyłem w następujący sposób, w skrypcie zdefiniowałem odpowiednią funkcję, a pod jego koniec dodałem:
import zc.lockfile def moja_uber_funkcja(): pass if __name__ == '__main__': try: lock = zc.lockfile.LockFile('moj_super_cron_skrypt') except zc.lockfile.LockError: sys.exit(1) moja_uber_funkcja() lock.close()
Dzięki temu, dopóki metoda close na obiekcie lock się nie wykona, skrypt będzie rzucał pięknym exceptionem zc.lockfile.LockError i mam pewność, że nic dalej się nie wykona ;)
Comments
Post a Comment