簡體   English   中英

Python中程序實例的隊列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM