如何使用芹菜守护进程调用芹菜任务

How to invoke celery task using celery daemon

我已经在我的 django 应用程序目录 myapp 下的 tasks.py 文件中编写了这个任务。

#periodic task that run every minute
@periodic_task(run_every=(crontab(hour="*", minute="*", day_of_week="*")))
def news():
    '''
    Grab url
    '''
    logger.info("Start task")
    now =  datetime.now()
    urls = []
    urls.append(crawler()) #crawler return dic obj
    for url_dic in list(reversed(urls)):
        for title, url  in url_dict.items():
            #Save all the scrape url in database
            Url.objects.create(title=headline, url=url)

    logger.info("Task finished: result = %s" %url)

此任务的主要目标是每分钟将 url 和标题推送到 django 数据库

为了 运行 这个 celery 任务,我们需要使用 django ./manage 实用程序调用这些命令 如何 运行 这些命令作为守护进程,我计划在 heroku 中托管这个应用程序

python manage.py celeryd --verbosity=2 --loglevel=DEBUG
python manage.py celerybeat --verbosity=2 --loglevel=DEBUG

但我需要 运行 这两个命令作为后台守护进程命令,我们如何 运行 将此命令作为守护进程以便我的 celery 任务可以 运行。

一个快速的解决方法是在你的命令后面加上“&”,即

python manage.py celeryd --verbosity=2 --loglevel=DEBUG &
python manage.py celerybeat --verbosity=2 --loglevel=DEBUG &

点击回车后,此任务将充当守护进程,并仍然打印出有用的调试信息。所以这对于初始阶段以及有时不严重依赖芹菜的小型应用程序非常有用。

出于开发目的,我建议使用 supervisor .See THIS POST,它为 celery、django 和 supervisor 集成提供了非常好的信息。阅读:post.

的 "Running Celery workers as daemons" 部分