芹菜周期性任务没有执行

Man*_*pta 6 python django celery

我正在学习芹菜,我创建了一个项目来测试我的配置.我安装celery==4.0.0django-celery-beat==1.0.1根据最新文档.

在drf_project(带有manage.py的主项目目录)/drf_project/celery.py中

from __future__ import absolute_import, unicode_literals
from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'drf_project.settings')
app = Celery('drf_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
Run Code Online (Sandbox Code Playgroud)

在drf_project/drf_project/settings.py中

INSTALLED_APPS += ('django_celery_beat',)
CELERYBEAT_SCHEDULE = {
    "test_1": {
        "task": "tasks.print_test",
        "schedule": timedelta(seconds=2),
    },
}
Run Code Online (Sandbox Code Playgroud)

在drf_project/drf_project/init .py中

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']
Run Code Online (Sandbox Code Playgroud)

在我的user_management应用程序(drf_project/user_mangement /)中,我添加了tasks.py

from celery import Celery
from time import strftime

app = Celery()

@app.task
def print_test():
    print strftime('%Y-%m-%d %H:%M:%S')
    with open('abc.txt', 'ab+') as test_file:
        test_file.writeline(strftime('%Y-%m-%d %H:%M:%S'))
Run Code Online (Sandbox Code Playgroud)

当我在不同的终端运行芹菜工人和我的django项目开发服务器时:

 celery -A drf_project worker -l info
Run Code Online (Sandbox Code Playgroud)

 python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

我可以在芹菜日志中看到我的任务,如:

[tasks]
   . user_management.tasks.print_test
Run Code Online (Sandbox Code Playgroud)

但它没有执行.我也没有收到任何错误.那我做错了什么?我按照芹菜的官方文件.

M. *_*sik 8

对于运行定期任务,你必须运行芹菜节拍而不是芹菜工人.

您可以在本页末尾找到更多信息:http: //docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

  • 我花了几天时间才发现.节拍只是在到期时发送任务.那些任务在那里排队.所以,你必须至少启动一个工人,以便挑选和执行这些任务! (7认同)
  • 我通过`celery -A drf_projectbeat`启动了beat服务。但任务仍然没有被执行,我在 django 服务器和 celery 中的任何地方都看不到某种日志。 (2认同)