【问题标题】:Daemonize Django Management Command守护 Django 管理命令
【发布时间】:2012-06-29 10:21:19
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: django sockets daemon celery


    【解决方案1】:

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

    【讨论】:

    • 没错。对于像 这样的 manage.py 命令,Supervisord 是最好的选择
    【解决方案2】:

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

    这有几个好处

    • 邮件服务器与 Django 解耦,因此您可以根据需要将它们放在不同的服务器上
    • 您需要的唯一守护程序是邮件程序
    • 不需要 celery -- Django 不需要关心任何触发,因为 Django 组件是被动的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 2012-02-13
      • 1970-01-01
      相关资源
      最近更新 更多