2012-06-27 75 views
1

我试图创建一个套接字应用程序,使用python的smptd和asyncore库监听端口25中的传入电子邮件,应用程序应该有权访问Django ORM以采取必要的措施。Daemonize Django管理命令

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

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

用芹菜解决它会更合适吗?我的应用程序监听一个套接字,而在我的理解中,Celery等待触发器,但是我没有发现任何Celery中长时间运行的任务的示例,当celeryd启动时它会自动启动。

回答

3

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

+0

没错。 Supervisord对于一个manage.py命令来说是最好的选择 – Hanynowsky

0

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

这有几个好处

  • 从Django中的邮件服务器被解耦合,所以你可以把它们放在如果你想不同的服务器
  • 你唯一需要的守护程序是邮件程序
  • 无需芹菜 - Django不需要关心任何触发,因为Django组件是被动的