gpt4 book ai didi

python - Python 中程序实例的队列?

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:58 25 4
gpt4 key购买 nike

基本上,我想让它一次只能运行我的程序的一个实例。快速谷歌搜索找到 this solution 用于防止程序的两个实例运行,我在下面对其进行了修改,以等待前一个实例完成后再运行。

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 写入/删除到日志文件,并检查它是否在日志中的下一个,但这似乎有点不雅。

最佳答案

我可以想象以下内容:

PSEUDOCODE

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)

关于python - Python 中程序实例的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com