Джанго и Сельдерей 4 тест - PullRequest
       17

Джанго и Сельдерей 4 тест

0 голосов
/ 28 сентября 2019

Я прочитал это , но не смог понять.Мои навыки ограничены.Я пробовал несколько ответов от stackoverflow, но они не работают для Celery4, который я использую.

У меня есть tasks.py с pn_list в нем

@shared_task
def pn_list(user_ids: typing.List[int], title, msg, extra: typing.Dict = None):
    ...

Когда я вызываю эту функцию в serializer, мне приходится звонить с pn_list.delay(...).Это становится проблемой.

Попытка:
Я установил CELERY_TASK_ALWAYS_EAGER=True и CELERY_TASK_EAGER_PROPAGATES=True settings.py.Это работает в Celery3, но моя версия 4

Ошибка:

 File "/Users/sarit/mein-codes/multy_herr/multy_herr/tweets/api/serializers.py", line 208, in create
    pn_list.delay(tmp_ids, title, msg, notification_msg)
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/task.py", line 427, in delay
    return self.apply_async(args, kwargs)
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/task.py", line 552, in apply_async
    link=link, link_error=link_error, **options)
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/task.py", line 772, in apply
    propagate=throw, app=self._get_app(),
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/trace.py", line 295, in build_tracer
    backend = task.backend
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/task.py", line 1030, in backend
    return self.app.backend
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/kombu/utils/objects.py", line 44, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/base.py", line 1207, in backend
    return self._get_backend()
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/base.py", line 925, in _get_backend
    self.loader)
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/backends.py", line 74, in by_url
    return by_name(backend, loader), url
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/celery/app/backends.py", line 54, in by_name
    cls = symbol_by_name(backend, aliases)
  File "/Users/sarit/.pyenv/versions/multy_herr/lib/python3.7/site-packages/kombu/utils/imports.py", line 57, in symbol_by_name
    module = imp(module_name, package=package, **kwargs)
  File "/Users/sarit/.pyenv/versions/3.7.3/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named "''"

Мой обходной путь будет if else для вызова другой функции.
И условие CELERY_TASK_ALWAYS_EAGER == True вызоветpn_list если не звонить pn_list.delay(...)

Было бы очень здорово, если бы у Django и Celery4 была общая переменная для решения этой проблемы, как это было в Celery3

Вопрос:
Есть ли простой метод проверки pn_list в serializer, который используется viewsets?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...