下游库类方法中的多处理

问题描述

我正在使用一个 python 类(我们称之为 class1),它安装了另一个库(我们称之为 library2)作为依赖项。 library2 有一个实例化的特定类,我们将其称为 class2。在 class2 的构造函数中,其他类被实例化。

class2 中有一个方法(我们称之为 method2),它包含一个循环,该循环会触发同一类中的另一个方法,进而触发在构造函数中实例化的类对象的方法。我不确定这些细节是否重要,但我想我会注意它们。以下是对这种情况的可视化尝试:

class1 -> 
  class2 -> (library dependency of class 1)
     method2 -> (multiprocessing needed here)
       external class methods

我想在 method2 的循环中实现多处理,如果我直接执行模块,我可以通过各种方式成功实现。

但是,如果类/模块是从上游进程触发的,我就会遇到可怕的 TypeError: can't pickle _hashlib.HASH objects。为了解决这个问题,我尝试了各种变通方法,其中一些包括

  1. 在 class2 中实现顶级包装器方法,我在其中实例化 class2,类似于给出的解决方here
  2. 在 class2 中实现一个顶级方法,将 class2 方法转换为 base64 并尝试映射转换后的函数,类似于答案 here

如前所述,如果我直接运行该类,这些不会显示错误,而是当该类由上游模块作为依赖项触发时。

我能够通过在 class2 的顶级方法中使用 pathos multiprocessing 并从 class2 的 method2 中调用它来解决错误,如下面的代码(受答案 here 启发),但这导致性能比没有多处理的原始代码差。

import pathos.multiprocessing as mp

class Class2:
    ...
    def method2(list1,list2):
        for i in range(0 to n):
            results = run_func_pathos(list1,list2)

def run_func_pathos(param_list1,param_list2):
    
    class2 = Class2()
    pool = mp.ProcessingPool(os.cpu_count())
    results = pool.map(class2.method2,param_list1,param_list2)

    return results

如何在下游类中利用多处理?这甚至可能吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)