【问题标题】:Multiprocessing: Hiding DB connection to fork processes多处理:隐藏与 fork 进程的 DB 连接
【发布时间】: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() 就不会尝试腌制数据库连接

【问题讨论】:

    标签: python multiprocessing pickle pool dbconnection


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 2021-01-13
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      相关资源
      最近更新 更多