我正在设计一个长时间运行的流程,由 Django 管理命令触发,需要相当频繁地运行。该进程应该通过 cron 作业每 5 分钟运行一次,但我想阻止它在第一个运行时间超过 5 分钟的极少数情况下运行该进程的第二个实例。
我考虑过创建一个触摸文件,该文件在管理进程启动时创建,并在进程结束时删除。然后,第二个管理命令进程将检查以确保触摸文件在运行之前不存在。但是,如果进程在没有正确删除触摸文件的情况下突然终止,这似乎是一个问题。看来必须有更好的方法来进行检查。
有人知道有什么好的工具或模式可以帮助解决此类问题吗?
最佳答案
出于这个原因,我更喜欢有一个长时间运行的进程,可以从共享队列中获取其工作。我所说的长期运行是指它的生命周期比单个工作单元更长。然后该进程由一些守护进程服务控制,例如 supervisord它可以在进程崩溃时接管重新启动进程的控制。这会将工作适本地委托(delegate)给知道如何管理进程生命周期的东西,并使您不必担心脚本范围内 posix 进程的细节。
如果您有一个队列,那么您还可以启动多个进程,每个进程都可以从队列中取出作业并处理它们,但这听起来似乎超出了您的问题范围。
关于python - 防止管理命令一次运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8718642/