Django Celery: TypeError: объект 'NoneType' не повторяется - PullRequest
1 голос
/ 10 февраля 2020

Я добавляю django-celery в свой проект, в настоящее время у вас возникнет проблема, при первой установке которой устанавливается устаревшая celery, которую необходимо обновить, и она имеет зависимость django-celery-results, которая также имеет это ожидаемая версия для каждого в зависимости от его версии. Я закончил со следующими версиями

Name: django-celery-results
Version: 1.0.0

Name: django-celery
Version: 3.3.1

Name: celery
Version: 4.4.0

в моем app / tasks.py У меня есть следующий код

from celery import shared_task
from django.conf import settings

@shared_task
def update_extend():
    users = User.objects.filter(is_active=True)
    for user in users:
        ....

, основанный на документах, это похоже на следующую строку код для проверки

(fortnox) sam@sam:/media/veracrypt1/fortnox$ python manage.py celery
Traceback (most recent call last):
File "manage.py", line 21, in <module>
    main()
File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
File "/home/sam/code/envs/fortnox/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
File "/home/sam/code/envs/fortnox/lib/python3.6/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/sam/code/envs/fortnox/lib/python3.6/site-packages/django/core/management/__init__.py", line 244, in fetch_command
    klass = load_command_class(app_name, subcommand)
File "/home/sam/code/envs/fortnox/lib/python3.6/site-packages/django/core/management/__init__.py", line 37, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
File "/home/sam/code/envs/fortnox/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/sam/code/envs/fortnox/lib/python3.6/site-packages/djcelery/management/commands/celery.py", line 11, in <module>
    class Command(CeleryCommand):
File "/home/sam/code/envs/fortnox/lib/python3.6/site-packages/djcelery/management/commands/celery.py", line 16, in Command
    tuple(base.get_options()) +
TypeError: 'NoneType' object is not iterable

, который выдает ошибку, показанную выше.

1 Ответ

2 голосов
/ 10 февраля 2020

django-celery не поддерживает Django версии выше Django 1.10. * И не поддерживает сельдерей 4. *. *

С Документация по сельдерею для Django

В предыдущих версиях Celery для работы с Django требовалась отдельная библиотека, но начиная с версии 3.1 это уже не так. Django поддерживается из коробки, поэтому этот документ содержит только базовый c способ интеграции сельдерея и Django. Вы будете использовать тот же API, что и пользователи, не являющиеся Django, поэтому рекомендуется сначала прочитать учебник Первые шаги с Celery и вернуться к этому учебнику. Если у вас есть рабочий пример, вы можете перейти к руководству «Следующие шаги».

Вы все еще можете использовать django-celery-results, но без необходимости использования djcelery

...