django - Django Celery:TypeError:“NoneType”对象不可迭代
问题描述
我正在添加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
这会引发上面显示的错误。
解决方案
django-celery
不支持高于 Django 1.10.* 的 Django 版本也不支持celery 4.*.*
以前版本的 Celery 需要一个单独的库来与 Django 一起工作,但从 3.1 开始不再是这种情况。现在支持开箱即用的 Django,因此本文档仅包含集成 Celery 和 Django 的基本方法。您将使用与非 Django 用户相同的 API,因此建议您先阅读 Celery 的第一步教程,然后再返回本教程。当您有一个工作示例时,您可以继续阅读后续步骤指南。
您仍然可以使用django-celery-results
但不需要 djcelery
推荐阅读
- html - 单击外部时如何禁用模态关闭?[物化]
- regex - 用于在 Athena 中解析垂直 CSV 的正则表达式
- amazon-web-services - 服务器上的 AWS 负载均衡器、静态 IP 和 SSL 终止(不是负载均衡器)
- discord - 您将在哪里存储 discord.py 机器人的机器人令牌?
- node.js - 尝试安装 nvm
- json - 如何在 Flutter/Dart 中优雅地使用原始 JSON?
- asp.net-mvc - 如何在 IIS 的项目 A 中为 ASP.NET 项目 B 设置根目录?
- r - Removing a category from boxplot in R
- arrays - Powershell - 将字符串拆分为由开始和结束字符串描述的数组
- matlab - 从cmd调用函数时Matlab中未定义的函数或变量