重複の可能性:
Python: プログラムの単一インスタンス
ジョブの完了にランチャー間隔よりも長い時間がかかる場合、cron ジョブが同時インスタンスを実行しないようにする必要があります。これを実現するために群れの概念を使用しようとしていますが、fcntl モジュールが期待どおりに動作していません。
これが2つの同時インスタンスを防ぐために機能する理由を誰か教えてください:
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