1

我在 Mac OS X (10.8.4) 中有一个 Django 项目,其中有一个打算为机场建模的应用程序。在数据库 SQLite 中,我有几张表,其中一张用于航班延误(航班、日期、新小时、原因)。

我的目标是使用 Celery 执行某些任务,例如通知用户航班延误和删除不再有效的延误。为此,我认为我会将 Celery worker 作为守护进程运行,但是在尝试阅读有关如何执行此操作的文档时遇到了巨大的问题。

所以我按照说明如何配置我的 Django 项目以使用 Celery、定义和调用任务、启动工作进程和调用任务。我的项目中有一个名为 celerytest 的额外应用程序和一个如下所示的 tasks.py 文件:

from celery import task
from flughafen.models import Country, Airline, Aircraft, Airport, Flight, Reservation, CheckIn, Delay

@task()
def delete_delays():
    # code to retrieve delays which are no longer valid and to delete them

我可以根据此处给出的说明调用此任务。但是,当我阅读将工作人员作为守护进程运行的说明时,我不清楚该怎么做。

该文档提到了 Mac OS X 的链接,该链接将我重定向到 github 页面,其中有一些我应该使用 launchctl 加载的 plist 文件。我已经下载并加载了它们,但它们显示为退出状态:

octavio:daemon ohd$ launchctl load org.celeryq.celerybeat.plist
octavio:daemon ohd$ launchctl load org.celeryq.celeryd.plist
octavio:daemon ohd$ launchctl load org.celeryq.celerymon.plist
octavio:daemon ohd$ launchctl list | grep celery
-   2   org.celeryq.celerymon
-   2   org.celeryq.celeryd
-   2   org.celeryq.celerybeat

我想我缺少一些像这样这样的配置,但我不确定它应该放在哪里。

谁能给我建议?

谢谢。

4

1 回答 1

2

我一直在努力解决这个问题。虽然我没有走 launchd 路线,但我最终使用 daemonize 实用程序获得了守护进程。

http://software.clapper.org/daemonize/

您可以使用 brew 轻松安装它。

然后使用 Fabric 我可以像这样重新启动工作人员:

def celeryd():
    with cd('/usr/local/Cellar/daemonize/1.7.4/sbin'):
        # Kill existing workers
        sudo('ps auxww | grep celeryd | grep -v "grep" | awk \'{print $2}\' | xargs kill')
        # Create new workers
        sudo('daemonize -u pipeadmin %s/manage.py celery worker' % siteDir)
于 2013-09-19T23:01:19.337 回答