2

我正在尝试创建一个套接字应用程序,该应用程序使用 python 的 smptd 和 asyncore 库侦听端口 25 中的传入电子邮件,该应用程序应该有权访问 Django ORM 以采取必要的操作。

到目前为止,我所做的方法是创建一个直接访问 Django 数据库的 python 脚本,并在主管下运行它,但这不是一个好的解决方案。合适的应该是有一个管理命令或类似任务队列(Celery)的东西。

如果我创建一个 Django 管理命令来运行这个长时间运行的套接字应用程序,我可以将它附加到主管吗?我需要守护它吗?有什么区别,我该如何守护它?我找到了 django.utils.daemonize 但没有找到任何关于它的文档。

用Celery解决会更合适吗?我的应用程序监听一个套接字,而 Celery,据我了解,等待触发,我没有在 celery 中找到任何在启动 celeryd 时自动启动的长时间运行任务的示例。

4

2 回答 2

3

对于您的任务,使用 python + supervisord是我认为的最佳解决方案。因为 Celery 的目标是执行任务,并运行计划任务。当您的脚本为 Celery 创建任务时,有退出方式,它将提供更好的性能。但是只有当你需要运行计划的后台任务,或者你的守护进程中有长时间执行的任务时,你才应该使用 celery。

于 2012-06-28T10:03:03.533 回答
0

作为管理命令的替代解决方案,我建议您让您的电子邮件服务器调用 Django 提供的 Web 服务。

这有几个好处

  • 邮件服务器与 Django 分离,因此您可以根据需要将它们放在不同的服务器上
  • 您需要的唯一守护程序是邮件程序
  • 不需要 celery——Django 不需要关心任何触发,因为 Django 组件是被动的
于 2012-07-13T16:53:27.603 回答