質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

バックグラウンド処理

バックグラウンド処理とは、マルチタスク環境において、ユーザーに対して前面に表示させている処理の裏側で実行させる処理のことを呼びます。バックグラウンド処理を行う事によって、ユーザーが他の作業に携わることが可能となります。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

0回答

727閲覧

"Typeerror:'_io.BufferedRandom'オブジェクトがシリアライズ化できません"の解消方法

yamatar

総合スコア4

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

バックグラウンド処理

バックグラウンド処理とは、マルチタスク環境において、ユーザーに対して前面に表示させている処理の裏側で実行させる処理のことを呼びます。バックグラウンド処理を行う事によって、ユーザーが他の作業に携わることが可能となります。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2021/01/07 02:25

編集2021/01/07 07:18

前提・実現したいこと

djangoで作成したアプリで画像のアップロードをする際、
以下のサイトを参考にdjango-rqで非同期処理のコードを追加したところ、
表題のエラーが発生しました。
どうすればエラーが解消できるのか分からない為、
何方か知見のある方がおりましたらご教示お願い致します。

※redis-server、RQのworkerは起動できています。

↓参考サイト
https://leben.mobi/blog/django_rq_hidouki/python/

発生している問題・エラーメッセージ

Internal Server Error: /upload/
TypeError: cannot serialize '_io.BufferedRandom' object

Internal Server Error: /upload/ Traceback (most recent call last): File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\django\core\handlers\exception.py ", line 34, in inner response = get_response(request) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\django\core\handlers\base.py", li ne 115, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\django\core\handlers\base.py", li ne 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\django\contrib\auth\decorators.py ", line 21, in _wrapped_view return view_func(request, *args, **kwargs) File "C:\Users\map\PycharmProjects\app-test\map\views.py", line 177, in upload rq_test.delay(fname) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\rq\decorators.py", line 64, in de lay meta=self.meta, description=self.description) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\django_rq\queues.py", line 68, in enqueue_call return self.original_enqueue_call(*args, **kwargs) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\django_rq\queues.py", line 64, in original_enqueue_call return super(DjangoRQ, self).enqueue_call(*args, **kwargs) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\rq\queue.py", line 286, in enqueu e_call job = self.enqueue_job(job, at_front=at_front) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\rq\queue.py", line 355, in enqueu e_job job.save(pipeline=pipe) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\rq\job.py", line 522, in save connection.hmset(key, self.to_dict(include_meta=include_meta)) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\rq\job.py", line 473, in to_dict obj['data'] = zlib.compress(self.data) File "C:\Users\map\anaconda3\envs\app-test\lib\site-packages\rq\job.py", line 221, in data self._data = dumps(job_tuple) TypeError: cannot serialize '_io.BufferedRandom' object

該当のソースコード

settingsの抜粋

settings

1INSTALLED_APPS = [ 2 # 非同期で追加 3 'django_rq', 4] 5 6# 非同期で追加 7RQ_QUEUES = { 8 'default': { 9 'HOST': 'localhost', 10 'PORT': 6379, 11 'DB': 0, 12 'PASSWORD': '', 13 'DEFAULT_TIMEOUT': 360, 14 }, 15} 16RQ_API_TOKEN = 'rq_result'

viewsの抜粋

views

1def upload(request): 2 t1 = time.time()# 時間計測用 3 if request.method == 'POST': 4 form = imgForm(request.POST, request.FILES) 5 if form.is_valid(): 6 for fname in request.FILES.getlist('image'): 7 rq_test.delay(fname) 8 object_list = upl_imgs.objects.all().order_by('-pk') 9 10 context = { 11 # 非同期で追加 12 'object_list': object_list, 13 } 14 else: 15 form = imgForm() 16 context = { 17 'form': form, 18 } 19 return render(request, 'map/upload.html', context) 20 21# 非同期で追加 22from django_rq import job 23@job 24def rq_test(fname): 25 im = Image.open(fname) # 画像サイズ取得のため実施 26 size = str(im.size[0]) + "x" + str(im.size[1]) # 画像サイズ 27 28 try: 29 dto = inside_judge(fname)[2] # 撮影日時 30 refname = dto + ".JPG" 31 except: 32 error_list.append(fname) 33 34 upl_imgs.objects.create(date=dto, image=refname, size=size) 35

urlsの抜粋

urls

1urlpatterns = [ 2 # 非同期で追加 3 path('django-rq/', include('django_rq.urls')), 4]

試したこと

celeryは起動ができなかった。

補足情報(FW/ツールのバージョンなど)

windows10
django 3.0.7
python 3.6.10
django-rq 2.2.0
rq 1.1.0
※UnpickleErrorのimporterrorが発生した為、1.7.0からダウングレードした

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問