我正在尋找最佳實踐來確保每分鐘執行的腳本腳本只有一個運行實例。對於例如如果我有一個每分鐘執行一次的cron,並且萬一這個過程需要更長的時間然後一分鐘,那麼不要再執行另一個。確保只有一個進程爲使用python的長時間運行的進程執行
現在我有以下功能。實質上,我得到當前進程的名稱,並執行ps grep來查看當前進程的計數是否已列出。有點麻煩,所以我正在尋找更pythonic的方式。
我將代碼放在文件的頂部。它確實有效,但又是一團糟。
def doRunCount(stop=False,min_run=1):
import inspect
current_file = inspect.getfile(inspect.currentframe())
print current_file
fn = current_file.split()
run_check = os.popen('ps aux | grep python').read().strip().split('\n')
run_count = 0
for i in run_check:
if i.find('/bin/sh')<0:
if i.find(current_file)>=0:
run_count = run_count + 1
if run_count>min_run:
print 'max proccess already running'
exit()
return run_count
這聽起來像你正試圖避免資源競爭條件。爲什麼不直接通過確保cron作業是原子解決問題?也許描述他們在做什麼的性質。 – HeyWatchThis 2012-03-06 04:22:56
只需編寫一個PID文件並檢查它是否存在。請參閱http://stackoverflow.com/questions/788411/check-to-see-if-python-script-is-running – 2012-03-06 04:43:12
但是如果進程崩潰並且存在一個現有的pid,並且進程沒有時間刪除pid? – Tampa 2012-03-06 05:52:43