多处理:隐藏与 fork 进程的 DB 连接
Posted
技术标签:
【中文标题】多处理:隐藏与 fork 进程的 DB 连接【英文标题】:Multiprocessing: Hiding DB connection to fork processes 【发布时间】:2021-08-14 03:15:07 【问题描述】:尝试从方法内部派生进程,但出现以下错误:
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() 就不会尝试腌制数据库连接
【问题讨论】:
【参考方案1】:我能够通过全局变量和函数使其工作.. 它很丑但是...
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)
【讨论】:
以上是关于多处理:隐藏与 fork 进程的 DB 连接的主要内容,如果未能解决你的问题,请参考以下文章