簡體   English   中英

django celerybeat 不調用 tasks.py 函數

[英]django celerybeat not invoking tasks.py function

基於教程: https : //www.merixstudio.com/blog/django-celery-beat/

celery.py 文件代碼

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from Backend.settings import INSTALLED_APPS

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: INSTALLED_APPS)

tasks.py 文件代碼

from celery.task import task
@task(name='task1')
def emailt():
    print("email func invoked")
    # code...

設置.py

from __future__ import absolute_import
import os
import djcelery
from celery.schedules import crontab
djcelery.setup_loader()

INSTALLED_APPS = [
'djcelery',
'django_celery_beat',
 ....
]

REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TIMEZONE = 'Asia/Kolkata'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'   

CELERYBEAT_SCHEDULE = {
'task1': 
    {
        'task': 'proj.tasks.emailt',
        'schedule': crontab(hour='*', minute='1', day_of_week='mon,tue,wed,thu,fri,sat,sun'),
    }
} 

在一個命令 shell 中,redis 服務器和 django py manage.py runserver 正在運行。 在另一個 shell 上,celery 命令運行如下:celery -A proj.tasks beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler

日志文件表示 celerybeat 正在運行。

Configuration ->
. broker -> redis://localhost:6379/0
. loader -> djcelery.loaders.DjangoLoader
. scheduler -> django_celery_beat.schedulers.DatabaseScheduler

. logfile -> [stderr]@%INFO
. maxinterval -> 5.00 seconds (5s)
[*************: INFO/MainProcess] beat: Starting...
[*************: INFO/MainProcess] Writing entries...
[*************: INFO/MainProcess] DatabaseScheduler: Schedule changed.
[*************: INFO/MainProcess] Writing entries...
[*************: INFO/MainProcess] Writing entries...

然而,tasks.py 中的函數 emailt() 仍然沒有被調用。 我無法找到 celerybeat 的問題。

DatabaseScheduler是數據庫調度程序的實現,不從CELERYBEAT_SCHEDULE字典中獲取任務

如果您打算使用這種類型的調度程序,您應該通過 django admin 或通過數據遷移/視圖創建PeriodicTask

您可以通過創建CrontabSchedule並將其附加到PeriodicTask ,將 crontab 表示法與任務中的默認調度程序或 DatabaseScheduler 一起使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM