我需要防止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
http://stackoverflow.com/questions/380870/python-single-instance-of-program的可能DUP。其中還包括一個名爲[tendo]的圖書館(http://pypi.python.org/pypi/tendo),用於處理所有煩人的跨平臺問題。當然它不回答「爲什麼工作而不是B?」問題,但它確實解決了根本問題「我應該怎麼做?」 – abarnert