[英]Queue of instances of a program in Python?
基本上,我想這樣做,以便一次只能運行我的程序的一個實例。 谷歌快速搜索找到了一種解決方案,用於防止程序的兩個實例運行,我在下面進行了調整,以等到前一個實例完成后再運行。
import fcntl, sys
pid_file = 'program.pid'
fp = open(pid_file, 'w')
while True:
try:
fcntl.lockf(fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
# another instance is running
continue
break
但是,這並不真正尊重程序被調用的時間。
例如,假設我在10:00運行此程序,它將持續5分鍾。 然后,說我在10:01和10:02再次運行該程序。 無法保證在10:01運行的實例將是第一個執行的實例。
我想按時間創建一個運行隊列,在該隊列中,對該程序的第一次調用是接下來要運行的那個。 有一個簡單的解決方案嗎? 我可以想象每個程序在啟動/完成時都將其進程ID寫入/刪除到日志文件中,並檢查它是否緊接在日志中,但這似乎有點不雅。
我可以想象以下內容:
偽代碼
def Signal_Handler(signal):
FIFO.push(signal.job_data)
def main(job_data):
while True:
process_Job(job_data)
job_data = FIFO.pop()
if not job_data:
break
if __name__ == '__main__':
job_data = sys.argv[1]
if Lock_Programm():
# First Instance
Signal.Handler(SIG_USR1, Signal_Handler)
main(job_data)
Unlock_Programm()
else:
# Lock failed other Instance is running
Signal.signal(SIG_USR1, job_data)
exit(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.