Сельдерейный работник не находит задание

Я использую worker в связке с beats, и beats прекрасно все находит, но как только beat передает задачу worker'у, выскакивает ошибка: KeyError: 'tasks.cache_popular_posts'. вся информация:

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

Please see
https://docs.celeryq.dev/en/latest/internals/protocol.html
for more information.

The full contents of the message body was:
b'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]' (77b)

The full contents of the message headers:
{'lang': 'py', 'task': 'tasks.cache_popular_posts', 'id': 'bdaa8c59-8b84-4f79-af1c-7fe34468894d', 'shadow': None, 'eta': None, 'expires': None, 'group': None, 'group_index': None, 'retries': 0, 'timelimit': [None, None], 'root_id': 'bdaa8c59-8b84-4f79-af1c-7fe34468894d', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': 'gen3644@WIN-7483UVBHTO4', 'ignore_result': False, 'replaced_task_nesting': 0, 'stamped_headers': None, 'stamps': {}}

The delivery info for this task is:
{'exchange': '', 'routing_key': 'celery'}
Traceback (most recent call last):
  File "C:\Users\User\VsCodeProjects\Pastebin_hardEdition\venv\lib\site-packages\celery\worker\consumer\consumer.py", line 658, in on_task_received
    strategy = strategies[type_]
KeyError: 'tasks.cache_popular_posts'

эта задача #posts/tasks.py

@app.task
def cache_popular_posts():
try:
    popular_posts = Post.objects.filter(views__gt=10)
    for post in popular_posts:
        hash = post.postmeta.hash_id
        cache.add(key=hash, value=post)
except Exception as ex:
    return ex

#app/celery.py

import os
from celery import Celery


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Pastebin_hardEdition.settings")

app = Celery("Pastebin_hardEdition")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()


#beats
app.conf.beat_schedule = {
    'cache-popular-post&Meta-every-30-seconds': {
        'task': 'tasks.cache_popular_posts',
        'schedule': 30.0,
    },
}
app.conf.timezone = 'UTC'

Брокер настроен и подключен #app/init.py

from .celery import app as celery_app

__all__ = ("celery_app",)

#posts/apps.py

class PostsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'posts'

def ready(self):
    import posts.signals
    from . import tasks

Мне очень нужна ваша помощь, пожалуйста

Я предполагаю, что ваша система - windows, судя по строке File "C:\Users\User\VsCodeProjects\Pastebin_hardEdition\venv\ в вашем коде.

Я не смог найти никаких проблем в вашем коде. Мой комментарий по поводу windows основан на моем собственном опыте и имеющейся информации.

Когда я пытался установить celery с django на windows, что бы я ни делал, я не мог заставить его работать (я перепробовал около 100 возможных методов и руководств).

В официальной документации сказано, что они не поддерживают windows. Но они поддерживают Linux.

Поддержка сельдерея для windows

Если вам нужна поддержка windows, вы можете попробовать Dramatiq. Dramatiq имеет отличную windows поддержку и django поддержку.

Драматик

Вернуться на верх