Powiel możliwe:
Python: single instance of programPrevent działa współbieżnych wystąpień skryptu Pythona
muszę zapobiec crona z prowadzenia jednoczesnych przypadki, gdy praca trwa dłużej, aby zakończyć niż wyrzutni interwał. Próbuję użyć koncepcji flock, aby to osiągnąć, ale moduł fcntl nie zachowuje się tak, jak się spodziewam.
Czy ktoś może mi powiedzieć, dlaczego to działa, aby zapobiec dwóch równoczesnych wystąpień:
import sys
import time
import fcntl
file_path = '/var/lock/test.py'
file_handle = open(file_path, 'w')
try:
fcntl.lockf(file_handle, fcntl.LOCK_EX | fcntl.LOCK_NB)
print 'no other instance is running'
for i in range(5):
time.sleep(1)
print i + 1
except IOError:
print 'another instance is running exiting now'
sys.exit(0)
i dlaczego to nie działa:
import sys
import time
import fcntl
def file_is_locked(file_path):
file_handle = open(file_path, 'w')
try:
fcntl.lockf(file_handle, fcntl.LOCK_EX | fcntl.LOCK_NB)
return False
except IOError:
return True
file_path = '/var/lock/test.py'
if file_is_locked(file_path):
print 'another instance is running exiting now'
sys.exit(0)
else:
print 'no other instance is running'
for i in range(5):
time.sleep(1)
print i + 1
Możliwa DUP z http://stackoverflow.com/questions/380870/python-single-instance-of-program. Które również wirowało z biblioteki zwanej [tendo] (http://pypi.python.org/pypi/tendo), aby poradzić sobie z wszystkimi irytującymi problemami z wieloma platformami. Oczywiście nie odpowiada na pytanie "Dlaczego działa, ale nie B?" pytanie, ale rozwiązuje podstawowe pytanie "Jak mam to zrobić?" – abarnert