Возможный дубликат:
Python: единственный экземпляр программы
Мне нужно предотвратить одновременное выполнение задания cron, когда выполнение задания занимает больше времени, чем интервал запуска. Я пытаюсь использовать концепцию flock для достижения этой цели, но модуль fcntl ведет себя не так, как я ожидал.
Может ли кто-нибудь сказать мне, почему это работает для предотвращения двух одновременных экземпляров:
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)
И почему это не работает:
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