我正在尝试创建一个套接字应用程序,使用 python 的 smptd 和 asyncore 库监听端口 25 中的传入电子邮件,该应用程序应该可以访问 Django ORM 以采取必要的操作。
到目前为止,我所做的方法是创建一个直接访问 Django 数据库的 python 脚本,并在主管下运行它,但这不是一个很好的解决方案。合适的方法是使用管理命令或类似任务队列(芹菜)的东西。
如果我创建一个 Django 管理命令来运行这个长时间运行的套接字应用程序,我可以把它附加到主管吗?我需要守护它吗?有什么区别,我怎样才能守护它?我找到了django.utils.daemonize,但没有找到任何关于它的文档。
用芹菜解决会更合适吗?我的应用程序侦听套接字,而 Celery 在我的理解中等待触发器,但我在 Celery 中找不到任何在启动芹菜时自动启动的长时间运行的任务的示例。
对于您的任务,我认为使用 python + supervisord 是最好的解决方案。因为芹菜的目标是执行任务,并运行定时任务。当您的脚本为 Celery 创建任务时,有退出方式,它将提供更好的性能。但是,仅当需要运行计划的后台任务或守护程序中有长时间执行的任务时,才应使用芹菜。
作为管理命令的替代解决方案,我建议你让你的电子邮件服务器调用 Django 提供的 Web 服务。
这有几个好处
- 邮件服务器与 Django 分离,所以如果你愿意,你可以把它们放在不同的服务器上
- 您唯一需要的守护程序是用于邮件程序
- 不需要芹菜——Django 不需要关心任何触发,因为 Django 组件是被动的