多处理:隐藏数据库连接到 fork 进程

问题描述

尝试从方法内部派生进程,但出现以下错误

 TypeError: can't pickle psycopg2.extensions.connection objects

当我实例化一个方法时:

res = pool.map(self.abc,data)

是的,我有一个存储在 self.db 中的数据库连接。如果我实例化简单函数没有问题

res = pool.map(abc,data)

问题是我无法提取Class之外的逻辑,依赖太多。

我的问题是:有没有办法暂时“屏蔽”self.db,这样我就可以在“池”吃午饭然后“取消屏蔽”它,这样 pool.map() 就不会尝试腌制数据库连接

解决方法

我能够通过全局变量和函数使其工作..它丑陋但是......

 global SELF
 def REDIRECT(arg) : return SELF.method(arg)

 class ....:

   def blah(self):
    ...
    global SELF
    SELF = self

    with Pool(....) as pool :

       res = pool.map(REDIRECT,data)