概要
[環境]
django、mysql、uwsgi、nginxを用いたwebサーバ
[エラー内容]
pythonのmultiprocessingを用いた並列処理実装時に、下記のエラーが発生しました。
MySQLdb.OperationalError: (2013, 'Lost connection to MySQL server during query')
[想定原因]
調べた限りでは、子プロセスを起動時にDB接続が切れてしまうことが原因のようです。
下記の対応方法を実施前に
mysqlの max_allowed_packetを編集することでエラー解消できることもあるみたいです。
その対応方法が多く掲載されていたため、先にそちらを実施いただくことをおすすめします。
[参考記事]
https://stackoverflow.com/questions/1884859/lost-connection-to-mysql-server-during-query
対応方法
- 親プロセスから子プロセスを起動する際に、DBの接続をすべて閉じる
- 子プロセス内でDB処理を挟む形でDB接続とDB接続を閉じる処理を追加
親プロセス
from django import db
# DB接続をすべて閉じる
db.connections.close_all()
p = Process(target=function, args=(var))
p.start()
子プロセス
from django.db import connection
#DBへの接続処理
connection.connect()
#DB関連の処理をここに記載
# 接続終了
connection.close()