1

我在 task.py 中创建了计划任务,但它似乎从未运行。我已经重新启动了我的工作人员并且正常任务运行得很好。由于我是新手,我是否错过了一些东西,我的设置中有我需要的设置吗?

我没有收到任何错误这是我的 task.py

  from celery.task import Task
  from celery.decorators import task
  from celery.task import PeriodicTask
  from datetime import timedelta

class ProcessScheduledRequests(PeriodicTask):
    run_every = timedelta(minutes=5)

    def run(self, **kwargs):

       process_something()
4

1 回答 1

2

运行定期任务

我不确定到目前为止您尝试了什么,或者您的settings.py文件是什么样的,但这里有一些方法可以让 djcelery 运行计划任务。

1)在你的tasks.py,创建一个任务并使用celery.decorators.periodic_task装饰器。例如

from celery.task.schedules import crontab   
from celery.decorators import periodic_task 

@periodic_task(run_every=crontab(hour=”*”, minute=”*”, day_of_week=”*”)) 
def a_periodic_task(): 
        print “Hello World!”

或者

@celery.decorators.periodic_task(run_every=datetime.timedelta(minutes=5))
def a_periodic_task(): 
        print “Hello World!”

2)在您的celery.conf文件中使用如下CELERYBEAT_SCHEDULE设置:

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    "runs-every-30-seconds": {
        "task": "tasks.add",
        "schedule": timedelta(seconds=30),
        "args": (16, 16)
     },
}

您可以在定期任务文档中了解更多相关信息。

尽管请记住,您必须通过以下方式以节拍模式启动 celery :

python manage.py celeryd -B

并检查您是否已完成所有安装步骤,包括添加djcelery到您的INSTALLED_APPS并运行python manage.py syncdb(或者python manage.py migrate djcelery如果您使用的是南)

部署

celery 文档中有一个很好的部分介绍了 celery 进程的守护进程以进行部署,包括节拍模式的示例django 配置

从文档:

# Where the Django project is.
CELERYBEAT_CHDIR="/opt/Project/"

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="settings"

# Path to celerybeat
CELERYBEAT="/opt/Project/manage.py celerybeat"

# Extra arguments to celerybeat
CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule"
于 2013-05-29T09:44:52.603 回答