redisとceleryを使用した非同期タスクの実行時エラーAttributeError:'str'object has no attribute'iteritems'
4834 ワード
コードは基本的に正常に構成されていますが、Celery-A myproject worker-l infoを実行するときにAttributeError:‘str’object has no attribute'iteritems’エラーが発生しました.2日間探してブログの文章を見ましたが、エラーの問題と私の問題の内容はあまり違いますが、タイプが違います.バージョンの問題と言って、私の元のredisバージョンは3.0.1のバージョンです.それから试してみて、私のredisバージョンを2.10.6のバージョンに下げて、谁が知っていますか?次は私のコードです
settings環境構成
プロジェクトディレクトリの下にあるinit.pyファイルでの設定
プロジェクトディレクトリの下にceleryを新規作成します.py
appディレクトリのmodles.pyファイル
appディレクトリの下にtasksを新規作成する.pyファイル
appが存在するディレクトリの下のviewsを構成します.py
プロジェクトディレクトリのurlsを構成します.py
ファイル構成が完了した後
1.移行データベースはpython manageを実行する.py makemirationsはpython manageを実行する.py migrate 2.コマンドラインで実行#myprojectは私のプロジェクト名ですが、Celery-A myproject worker-l infoを変更する必要がある場合は
次の表示が表示された場合は正常です.
settings環境構成
#celery redis://redis ip : /
BROKER_URL = 'redis://localhost:6379/0'
# celery ,
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
# celery
CELERY_ACCEPT_CONTENT = ['application/json', ]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
# celery , settings TIME_ZONE
CELERY_TIMEZONE = TIME_ZONE
プロジェクトディレクトリの下にあるinit.pyファイルでの設定
# coding:utf-8
from __future__ import absolute_import, unicode_literals
# celery
from .celery import app as celery_app
プロジェクトディレクトリの下にceleryを新規作成します.py
# coding:utf-8
from __future__ import absolute_import, unicode_literals
from celery import Celery
from django.conf import settings
import os
# , Django
project_name = os.path.split(os.path.abspath('.'))[-1]
project_settings = '%s.settings' % project_name
#
os.environ.setdefault('DJANGO_SETTINGS_MODULE', project_settings)
# Celery
app = Celery(project_name)
# django settings celery
app.config_from_object('django.conf:settings')
# Celery
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
appディレクトリのmodles.pyファイル
#coding:utf-8
from __future__ import unicode_literals
from django.db import models
class Blog(models.Model):
caption=models.CharField(max_length=30)
def __unicode__(self):
return self.caption
appディレクトリの下にtasksを新規作成する.pyファイル
# coding:utf-8
from celery import task
import time
@task
def sendmail(email):
print(' ************************************************************** %s' % email)
time.sleep(5) # 5
print('success')
return True
appが存在するディレクトリの下のviewsを構成します.py
#coding:utf-8
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import Blog
import json
from .tasks import sendmail
def tasks(request):
# # ,
sendmail.delay('[email protected]')
#
data = list(Blog.objects.values('caption'))
#return HttpResponse("ok")
return HttpResponse(json.dumps(data), content_type='application/json')
プロジェクトディレクトリのurlsを構成します.py
from django.contrib import admin
from django.urls import path
from celery_demo import views
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^', views.tasks, name='tasks'),
]
ファイル構成が完了した後
1.移行データベースはpython manageを実行する.py makemirationsはpython manageを実行する.py migrate 2.コマンドラインで実行#myprojectは私のプロジェクト名ですが、Celery-A myproject worker-l infoを変更する必要がある場合は
次の表示が表示された場合は正常です.
,
D:\Pycharmproject\Pycharmproject\celerytest>Celery -A celerytest worker -l info
-------------- celery@Alex-PC v3.1.17 (Cipater)
---- **** -----
--- * *** * -- Windows-7-6.1.7601-SP1
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: celerytest:0x36cf630
- ** ---------- .> transport: redis://localhost:6379/0
- ** ---------- .> results: redis://localhost:6379/0
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery
[tasks]
. celerytest001.task.sendmail
[2018-06-27 14:19:54,128: INFO/MainProcess] Connected to redis://localhost:6379/
0
[2018-06-27 14:19:55,148: INFO/MainProcess] mingle: searching for neighbors
[2018-06-27 14:19:58,177: INFO/MainProcess] mingle: all alone
[2018-06-27 14:20:03,237: WARNING/MainProcess] c:\python27\lib\site-packages\cel
ery\fixups\django.py:254: UserWarning: Using settings.DEBUG leads to a memory le
ak, never use this setting in production environments!
warnings.warn('Using settings.DEBUG leads to a memory leak, never '
[2018-06-27 14:20:03,242: WARNING/MainProcess] celery@Alex-PC ready.
python manage.py runserver django
, ,
[2018-06-27 14:20:03,242: WARNING/MainProcess] celery@Alex-PC ready.
[2018-06-27 14:21:17,400: INFO/MainProcess] Received task: celerytest001.task.se
ndmail[38801961-f60a-482b-a63b-f5af003d1653]
[2018-06-27 14:21:17,413: WARNING/Worker-1] ************************************************************** [email protected]
[2018-06-27 14:21:22,418: WARNING/Worker-1] success