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



我试图找出在我的 django 应用程序中保持 zeroMQ 侦听器永远运行的最佳方式。

我正在我的 Django 项目中设置一个 zmq 服务器应用程序,它充当我们网络中其他应用程序的内部 API(无需通过 http/requests 的东西,因为这些应用程序是内部的(。我希望我的 django 项目内的 zmq 监听器永远活着。

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

我目前正在想:

  • 设置一个 Django 管理命令,该命令将运行侦听器并使其永远保持活动状态(也称为 zmq 侦听器代码中的无限循环(或

  • 使用芹菜工人始终保持 ZMQ 侦听器活动?但我不确定如何让芹菜工人仅在任务未运行时重新启动任务。所有的芹菜文档都是关于频率/延迟运行的。或者也许我应该让芹菜清除任务@给定的间隔并重新启动它。

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

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

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

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

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

相关内容

  • 没有找到相关文章