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