我用pymysql和多处理程序。
请参考以下代码。
import os
from multiprocessing import Pool
import pymysql
class Test:
def __init__(self):
self.connection = pymysql.connect(host='host',
user='use',
password='pwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
def print(self, args):
print("[Pid:{}] {}".format(os.getpid(), args))
return args
def run(self):
with Pool(processes=4) as p:
print(p.map(self.print, [1,2]))
if __name__ == '__main__':
test = Test()
test.run()
我在__init__
中定义了mysql连接以重用它。
但是当我执行它时,会抛出错误。
TypeError: cannot serialize '_io.BufferedReader' object
问题1。
问题2。
谢谢。
答案 0 :(得分:2)
由于multiprocessing
启动了多个进程来运行您的代码,因此它将尝试序列化数据以从父进程传输到子进程。尝试序列化self.connection
对象pymysql.connection
时,可能会出现错误。
最简单的解决方法是在每个进程中使用不同的连接。只要您可以控制正在启动的进程数,就可以了。