Celery和Django - 作为守护进程运行的工作者(Mac OS X)

时间:2013-06-18 00:10:23

标签: django celery daemon django-celery

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

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

所以我遵循了如何配置我的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

我可以根据here给出的说明调用此任务。但是,当我阅读Running the worker as a daemon的说明时,我不清楚该怎么做。

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

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

我想我错过了thisthis这样的配置,但我不确定它应该位于何处。

有人可以请我提供建议吗?

感谢。

1 个答案:

答案 0 :(得分:2)

我正在努力解决这个问题。虽然我没有进入启动路线,但我最终使用daemonize实用程序获得了守护工作者。

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

您可以使用brew轻松安装。

然后使用Fabric我可以像这样重新启动worker:

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)