我有一个 Django 应用程序,它需要访问受 API 密钥速率限制的 Web API。为了管理对 API 的请求,我创建了一个简单的后台服务器,它轮询我的 Django ORM 以获取排队的任务请求,并相对于我的应用服务器异步执行它们(应用服务器不需要阻塞结果)。工作服务器使用自定义的 manage.py 命令启动。这些外部查找的处理要求非常低,所以我想直接从我的主 Web 服务运行它们。我已经用一个临时的互斥锁来操纵它,这样当我的应用程序扩展时,这些工作服务器中只有一个会运行。
我试图找出在部署应用程序时自动启动此工作服务器的最佳方法。我尝试将它作为命令添加到我的 supervisord.conf 文件中,但失败并出现错误ImportError: No module named django.core.management
。我认为这是因为 supervisord 没有在安装 Django 的虚拟环境中运行。因此,我尝试从postinstall
钩子中运行一个单独的 supervisord 副本。这导致我的部署失败,因为postinstall
在终止之前等待所有命令完成,并且它正在超时。
有没有办法修复这些方法中的任何一种,或者另一种可能有效的方法?在我看来,即使我确实创建了一个单独的python-worker
服务,我也会遇到类似的问题。