【问题标题】:Kick off daemonized service using djangos manage.py custom command?使用 djangos manage.py 自定义命令启动守护程序服务?
【发布时间】:2011-03-13 05:19:43
【问题描述】:

我的可重用 django 应用程序中有一个自定义命令,我想启动一个守护服务,然后返回,让服务继续运行。

我已经将我的服务实现为一个带有启动方法的简单类。当 start 被调用时,它会在一个永恒的循环中运行,休眠 10 秒,然后使用 django orm 检查项目 settings.py 文件中配置的数据库,检查给定文件夹中的条目。

我希望能够:

./manage.py startservice

我的服务并返回。然后在同一个shell中:

./manage.py runserver

并开始在特定数据库表中添加条目,这些条目会在 5 秒内被后台运行的服务拾取并处理。

我已经研究了 celery 以寻求更多基于消息队列的方法,但它依赖于太多其他东西。重要的是整个事情都遵循 django 的可重用应用程序模式。

有什么提示或想法吗?

【问题讨论】:

  • 请注意,celery 可以使用 django ORM 和数据库而不是 RabbitMQ,如果这就是您的意思,因为您过于依赖其他东西。

标签: python django service command


【解决方案1】:

我有一个图书馆的开端,django-initd,来处理这个:见the project on GitHub

Django 实际上包含一个用于进程自身守护进程的实用程序,在django.utils.daemonize 中,我的库负责启动/关闭、日志记录以及与管理命令的交互。我很想知道它是否对您有帮助。

【讨论】:

    【解决方案2】:

    为什么要将服务作为单独的进程启动?

    在线程中运行,与 runserver 在同一进程中。

    【讨论】:

    • 嗯......你能给我一个简单的例子来说明如何做到这一点吗?没有任何使用线程的经验。我计划再启动至少两个服务(一个 ftpserver 和一个虚拟文件系统的挂载),所以如果我可以使用线程来管理它们,那就太好了。
    • 这里的基本示例。 import threading def worker(): # 在这里做一些有用的工作 threading.Thread(target = worker).start() 阅读threading 模块的文档。
    猜你喜欢
    • 2018-08-16
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2012-09-30
    相关资源
    最近更新 更多