Django Celery Beat在Celery中执行Django中的定期任务无法正常工作

如何解决Django Celery Beat在Celery中执行Django中的定期任务无法正常工作

我想将芹菜添加到我的django项目中。但是,尽管我遵循了官方文档中的步骤,但是它似乎无法按预期工作。 这是我的Django项目的一部分:

.crt

然后初始化文件

# celery.py

import os

from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE','bookProjectSetting.settings')

app = Celery('bookProjectSetting')

app.config_from_object('django.conf:settings',namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

app.conf.beat_schedule = {
    'update-lifetime': {
        'task': 'tasks.update_life_time_of_books','schedule': crontab(minute='*/5'),},}

现在,在我的应用文件夹(名为# __init__.py from .celery import app as celery_app __all__ = ('celery_app',) )中,books如下所示:

tasks.py

在我的from books.models import Book from celery import shared_task @shared_task def update_life_time_of_books(): # Query all the books in our database print("Query all books.") books = Book.objects.all() # do sth. with books. for the sake of brevity I do not show this 文件中,有这个用于芹菜:

settings.py

我通过CELERY_broKER_URL = 'redis://localhost:6379' CELERY_TIMEZONE = 'Europe/Berlin' # ... bla bla INSTALLED_APPS = [ 'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','django_celery_beat','rest_framework','books',] 命令在第二个选项卡中启动了Redis服务器,以便它可以充当代理。我还通过redis-server启动了django服务器。 最后,我通过以下命令启动了工作程序:

python manage.py runserver

但是结果我得到了:

celery -A bookProjectSetting beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler

因此,似乎任务是在5分钟后发送的,就像我在celery beat v5.0.1 (singularity) is starting. __ - ... __ - _ LocalTime -> 2020-10-23 13:56:29 Configuration -> . broker -> redis://localhost:6379// . loader -> celery.loaders.app.AppLoader . scheduler -> django_celery_beat.schedulers.DatabaseScheduler . logfile -> [stderr]@%INFO . maxinterval -> 5.00 seconds (5s) [2020-10-23 13:56:29,666: INFO/MainProcess] beat: Starting... [2020-10-23 14:00:00,021: INFO/MainProcess] Scheduler: Sending due task update-lifetime (tasks.update_life_time_of_books) 中通过crontab声明的那样(请参见上文),但是例如,我的任务功能(见上文)中的celery.py却没有发送被执行。因此,我假设我的任务没有执行。为什么???我必须说,官方文档中没有明确的示例,我发现的材料/文章仅适用于芹菜3或4。我正在使用芹菜5。

在这里使用的库的版本如下:

  • 芹菜== 5.0.1
  • Django == 3.1.2
  • django-celery-beat == 2.1.0
  • redis == 3.5.3

我的django项目文件夹结构如下:

print("Query all books.")

解决方法

celery -A bookProjectSetting worker -l infocelery -A bookProjectSetting beat -l INFO 需要同时启动。然后,您可以观察您的任务是否正常运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?