繁体   English   中英

芹菜定期任务未执行

[英]celery periodic tasks not executing

我正在学习芹菜,我创建了一个项目来测试我的配置。 我根据最新的文档安装了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()

在 drf_project/drf_project/settings.py

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

在 drf_project/drf_project/ init .py

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

__all__ = ['celery_app']

在我的 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'))

当我通过以下方式在不同的终端中运行 celery worker 和我的 django 项目开发服务器时:

 celery -A drf_project worker -l info

 python manage.py runserver

我可以在 celery 日志中看到我的任务,例如:

[tasks]
   . user_management.tasks.print_test

但它没有执行。 我也没有收到任何错误。 所以我做错了什么? 我遵循了 celery 的官方文档。

要运行周期性任务,您必须运行两个服务: celery beatcelery worker

您可以下一页的底部找到更多信息。

这是我为运行 celery worker 和 celery beat 而设置的 docker-compose 文件配置。 它完成了这项工作。 确保在下面的docker-compose文件中更改 main_project_folder 名称:

version: '3'

services:
  
  redis:
    image: "redis:latest"
    ports:
      - "6379:6379"

  worker:
    build:
      context: .
      dockerfile: Dockerfile
    image: madefire/chordtest
    command: bash -c "celery -A main_project_folder_name worker -l INFO"
    environment:
      - BROKER_URL=redis://redis:6379/0
      - RESULT_BACKEND=redis://redis:6379/0
      - C_FORCE_ROOT=true
    volumes:
      - ./:/app/
    depends_on:
      - redis

  celery_beat:
    build:
      context: .
      dockerfile: Dockerfile
    image: madefire/chordtest
    command: bash -c "celery -A main_project_folder_name beat"
    environment:
      - BROKER_URL=redis://redis:6379/0
      - RESULT_BACKEND=redis://redis:6379/0
      - C_FORCE_ROOT=true
    volumes:
      - ./:/app/
    depends_on:
      - redis

暂无
暂无

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

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