Daemonize Django管理命令

时间:2012-06-27 22:06:31

标签: django sockets daemon celery

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

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

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

用Celery解决它会更合适吗?我的应用程序监听套接字,而Celery,在我的理解中,等待触发器,我没有在Celery中找到任何长期运行的任务样本,当celeryd启动时会自动启动。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

这有几个好处

  • 邮件服务器与Django分离,因此如果需要,可以将它们放在不同的服务器上
  • 您需要的唯一守护程序是邮件程序
  • 不需要芹菜 - Django不需要关心任何触发,因为Django组件是被动的