gpt4 book ai didi

python - 如何在 python Django 框架中只执行一个进程的运行实例?

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:44 24 4
gpt4 key购买 nike

我有一个 python Django 管理命令,应该在接收到输入文件时调用它,但是这个命令对于并行调用来说是不安全的。因此,只有当没有其他文件正在处理时,才应处理输入文件。

我的一个解决方案是使用锁定文件。基本上,在进程开始时创建一个锁定文件并在结束时将其删除。

我担心如果进程崩溃,锁定文件将不会被删除,因此在我们手动删除该锁定文件之前,不会处理任何其他文件。

解决方案不需要特定于 Django 甚至 python,但是强制只运行此进程的一个实例的最佳实践是什么?

最佳答案

正如 KlausD 在他的评论中提到的那样,规范(和语言不可知)的解决方案是使用包含正在运行的进程的 pid 的锁定文件,因此负责获取锁定的代码可以检查进程是否仍在运行。

如果您在项目中使用 Redis,另一种解决方案是将锁存储在 Redis 中,其 TTL 比任务的最坏情况运行时间稍长。这确保了锁将被释放,并且还允许在需要时轻松地在多个服务器之间共享锁。

编辑:

is it possible that the process crashes and another process pick up the same pid?

Yes , of course ,甚至是 rather likely (这是一种轻描淡写的说法)在服务器上运行了一个月或更长时间而没有重新启动,如果服务器运行了很多短暂的进程则更是如此。您不仅需要检查是否有与此 pid 匹配的正在运行的进程,还需要检查 get the process stats检查进程开始时间、命令行、父进程等,并确定它是同一进程还是新进程的可能性。

请注意,这并不是什么新鲜事 - 大多数进程监控工具都面临着同样的问题,因此您可能想看看他们是如何解决这个问题的(gunicorn 可能是一个很好的起点)。

关于python - 如何在 python Django 框架中只执行一个进程的运行实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51996912/

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