我正在尝试在Django应用程序中将芹菜用于后台处理。Django版本是1.4.8,最新适用的celery版本是3.1.25。
我使用Redis(3.1.0)作为代理和后端,使用json作为序列化器。
启动工作程序时
celery -A celery_app worker -l info,出现属性错误 'unicode' object has no attribute 'iteritems'
我的settings.py文件:
BROKER_URL = 'redis://localhost'
CELERY_RESULT_BACKEND = 'redis://localhost/'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True
Run Code Online (Sandbox Code Playgroud)
celery_app.py:
import sys
from django.conf import settings
from celery import Celery
project_root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(project_root, '../env'))
sys.path.insert(0, os.path.join(project_root, '../'))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')
app.config_from_object('project.settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
Run Code Online (Sandbox Code Playgroud)
task.py:
@celery_app.task
def sample_task(x):
return 'Test response'
Run Code Online (Sandbox Code Playgroud)
这就是我运行此任务的方式:
sample_task.delay({'key': 'test'})
Run Code Online (Sandbox Code Playgroud)
我得到以下错误:
File "/Users/user/project/venv/lib/python2.7/site-packages/redis/_compat.py", line 94, …Run Code Online (Sandbox Code Playgroud)