具有多处理抛出类型错误的pymysql

pymysql with multiprocessing throw typeerror

我使用了 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.

谢谢。

由于 multiprocessing 将多个进程启动到 运行 您的代码,它会尝试序列化数据以从父进程传输到子进程。当它尝试序列化 self.connection - 这是 pymysql.connection 对象时,可能会出现错误。

最简单的解决方法是在每个进程中使用不同的连接。只要您可以控制启动的进程数,就应该没问题。