繁体   English   中英

Django芹菜周期性任务没有运行(Heroku)?

[英]Django Celery Periodic Task not running (Heroku)?

我有一个我用Heroku部署的Django应用程序。 我正在尝试用芹菜每分钟创建一个周期性任务。 但是,当我使用以下命令观察worker的日志时:

heroku logs -t -p worker 

我没有看到我的任务正在执行。 也许我有一个缺失的步骤? 这是我的配置如下......

Procfile

web: gunicorn activiist.wsgi --log-file -
worker: celery worker --app=trending.tasks.app

Tasks.py

import celery
app = celery.Celery('activiist')
import os
from celery.schedules import crontab
from celery.task import periodic_task
from django.conf import settings
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
                CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])
os.environ['DJANGO_SETTINGS_MODULE'] = 'activiist.settings'
from trending.views import *
@periodic_task(run_every=crontab())
def add():
    getarticles(30)

有一点需要补充。 当我使用python shell和“delay()”命令运行任务时,任务确实运行(它显示在日志中) - 但它只运行一次且仅在执行时运行。

您需要单独的工作人员来执行节拍过程(负责执行定期任务):

web: gunicorn activiist.wsgi --log-file -
worker: celery worker --app=trending.tasks.app
beat: celery --app=trending.tasks.app

工作人员不需要定期任务,因此可以省略相关行。 另一种可能性是在工作人员中嵌入节拍:

web: gunicorn activiist.wsgi --log-file -
worker: celery worker --app=trending.tasks.app -B

但引用芹菜文件

你也可以通过启用worker -B选项来开始在worker中嵌入beat,如果你永远不会运行多个worker节点,这很方便,但它并不常用,因此不推荐用于生产用途

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM