gpt4 book ai didi

python - 让 zmq 服务器在 Django 中永远运行?

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:33 25 4
gpt4 key购买 nike

我正在尝试找出让 ZeroMQ 监听器在我的 django 应用程序中永远运行的最佳方法。

我正在我的 Django 项目中设置一个 zmq 服务器应用程序,它充当我们网络中其他应用程序的内部 API(无需通过 http/requests 内容,因为这些应用程序是内部的)。我希望 django 项目中的 zmq 监听器始终处于事件状态。

我希望我的 Django 项目中有 zmq 监听器,这样我就可以访问所有项目模型(用于查询)和其他 django 上下文内容。

我目前在想:

  • 设置一个 Django 管理命令来运行监听器并使其永远保持事件状态(也称为 zmq 监听器代码内的无限循环)或

  • 使用 celery Worker 来始终保持 zmq 监听器处于事件状态?但我不太确定如何让 celery 工作人员仅在任务未运行时重新启动该任务。所有 celery 文档都是关于频率/延迟运行的。或者也许我应该让 celery 在给定的时间间隔内清除任务并重新启动它..

有关性能影响或替代方法的任何提示、建议?

最佳答案

设置管理命令是执行此操作的好方法,尤其是在您自己的硬件上运行时。

如果您在云中运行,其中机器可能会随着您的进程一起消失,那么后者是更好的选择。我就是这样做的:

  1. 设置一个每 N 秒运行一次的定期任务(您需要在某处运行 celerybeat)
  2. 当任务生成时,它首先检查共享网络资源(redis、zookeeper 或数据库),以查看另一个进程是否具有事件/有效 lease 。如果存在,则中止。
  3. 如果没有有效的租约,请获取租约(注意此处的并发性!),然后启动无限循环,确保定期续订租约。
  4. 添加检测,以便您知道进程在谁、在哪里运行。
  5. 在多个盒子上启动 celery 工作线程,从指定的定期任务所在的同一个队列中进行消耗。

第二种解决方案更复杂,更难实现;因此,如果可以的话,单例是很棒的,并考虑使用类似supervisord的东西来确保进程在由于某种原因出现故障时能够重新启动。

关于python - 让 zmq 服务器在 Django 中永远运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19163195/

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