未应用 Django Celery 更改 [英] Django Celery Changes Not Applied

查看:61
本文介绍了未应用 Django Celery 更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 django-celery 代码无法重新加载,我在看到一个据称已解决的错误后得出结论.谁能告诉我如何正确重启我的 Celery 服务器,或者问题是否仍然存在?

My django-celery code cannot reload, which I concluded after seeing an error that was supposedly resolved. Can anyone tell me how to properly restart my Celery server, or is the problem still existent?

顺便说一下,在 Windows 10 上运行.

Running on Windows 10, by the way.

文件结构

|-- manage.py
|-- nttracker\
    |-- celery.py
    |-- tasks.py
    |-- settings.py

我还没有添加任何单独的配置文件.

I have not yet added any separate configuration files yet.

nttracker/celery.py

import os

from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nttracker.settings')
postgres_broker = 'sqla+postgresql://user:pass@host/name'

app = Celery('nttracker', broker='amqp://', backend='rpc://', include=['nttracker.tasks'])
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

app.conf.update(
    result_expires=3600,
)

app.conf.beat_schedule = {
    'add-every-10-seconds': {
        'task': 'nttracker.tasks.add',
        'schedule': 10.0,
        'args': (16, 16)
    },
}

if __name__ == '__main__':
    app.start()

nttracker/tasks.py

from __future__ import absolute_import

import django
django.setup()

from celery import Celery
from celery.schedules import crontab

app = Celery()

@app.task
def add(x, y):
    print(x + y)

nttracker/settings.py

# Celery Configuration Options
CELERY_TIMEZONE = "valid/timezone"
CELERY_RESULT_BACKEND = 'django-db'
CELERY_BROKER_URL = 'redis://127.0.0.1:6379'

# celery setting.
CELERY_CACHE_BACKEND = 'default'

# django setting.
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

终端一输出(celery -A nttracker worker --pool=solo -l INFO)

[2021-06-04 20:03:54,409: INFO/MainProcess] Received task: nttracker.tasks.add[4f9e0e15-82de-4cdb-be84-d3690ebe142e]
[2021-06-04 20:03:54,411: WARNING/MainProcess] 32
[2021-06-04 20:03:54,494: INFO/MainProcess] Task nttracker.tasks.add[4f9e0e15-82de-4cdb-be84-d3690ebe142e] succeeded in 0.09399999999732245s: 
None
[2021-06-04 20:04:04,451: INFO/MainProcess] Received task: nttracker.tasks.add[da9c8999-3937-44fd-8d4b-15ff83977a4b]
[2021-06-04 20:04:04,452: WARNING/MainProcess] 32
[2021-06-04 20:04:04,529: INFO/MainProcess] Task nttracker.tasks.add[da9c8999-3937-44fd-8d4b-15ff83977a4b] succeeded in 0.07800000000861473s: 
None
[2021-06-04 20:04:14,497: INFO/MainProcess] Received task: nttracker.tasks.add[c82b5099-e1dd-4f7b-a068-8041268571d1]
[2021-06-04 20:04:14,498: WARNING/MainProcess] 32
[2021-06-04 20:04:14,568: INFO/MainProcess] Task nttracker.tasks.add[c82b5099-e1dd-4f7b-a068-8041268571d1] succeeded in 0.0629999999946449s: None
[2021-06-04 20:04:23,187: ERROR/MainProcess] Received unregistered task of type 'tasks.add'.
The message has been ignored and discarded.

Did you remember to import the module containing this task?
Or maybe you're using relative imports?

Please see
http://docs.celeryq.org/en/latest/internals/protocol.html
for more information.

The full contents of the message body was:
b'[[16, 16], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]' (83b)
Traceback (most recent call last):
  File "c:\users\xxxx\onedrive\desktop\github_new\nttracker\venv\lib\site-packages\celery\worker\consumer\consumer.py", line 555, in on_task_received
    strategy = strategies[type_]
KeyError: 'tasks.add'
[2021-06-04 20:04:24,544: INFO/MainProcess] Received task: nttracker.tasks.add[66f050ac-b17d-4a7c-9bc6-564cc1d84ae1]
[2021-06-04 20:04:24,545: WARNING/MainProcess] 32
[2021-06-04 20:04:24,620: INFO/MainProcess] Task nttracker.tasks.add[66f050ac-b17d-4a7c-9bc6-564cc1d84ae1] succeeded in 0.07799999999406282s: 
None

终端二输出(celery -A nttracker beat -S django)

celery beat v5.0.5 (singularity) is starting.
__    -    ... __   -        _
LocalTime -> 2021-06-04 19:58:21
Configuration ->
    . broker -> redis://127.0.0.1:6379//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> django_celery_beat.schedulers.DatabaseScheduler      

    . logfile -> [stderr]@%WARNING
    . maxinterval -> 5.00 seconds (5s)

我想强调的一点是,在 30 秒的间隔内,32 被打印了三次(来自 add(16, 16) 但也会有一个 tasks.添加错误.

I'd like to stress the point that, in a 30-second interval, 32 was printed trice (from add(16, 16) but there will also be one tasks.add error.

我尝试重新启动我的 redis 服务器和 celery 的 worker 并击败,但初始导入错误仍未解决.

I've tried to restart my redis server and celery's worker and beat, but the initial import error was still not resolved.

有人可以帮忙吗?非常感谢.

Can anyone please help? Many thanks in advance.

推荐答案

导入你的任务项目 settings.py 文件

import your task project settings.py file

CELERY_IMPORTS = (
   "import task here"
)

这篇关于未应用 Django Celery 更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆