python - 使用Python并行操作对象

标签 python parallel-processing

我有一个对象列表ObjList,其中所有对象都是同一类的实例。这个类有一个方法 run ,我想为 ObjList 中的对象并行执行该方法。

然后计算结果存储在对象内。如果没有并行化,我目前会做类似的事情

for obj in self.ObjList:
    obj.Run()

此编码是包含并处理这些对象的“列表”的类的类方法的一部分。之后,我希望能够读取 obj.Run 执行的计算结果。我尝试了 multiprocessing.Pool 方法,但遇到了 pickle 问题。我还尝试使用 multiprocessing.Process 但遇到了问题,结果存储在对象的副本中,然后该副本被丢弃。我没有设法返回被操纵的对象。

是否有一种简单的方法可以将相同的类方法应用于作为同一类实例的对象列表(这相当复杂并且本身使用多个对象)?

编辑:我尝试了this question的答案中建议的方法。但后来我总是收到以下形式的错误

AttributeError: Can't pickle local object 'someclass.<locals>.<lambda>'

最佳答案

我不确定我将提供的是“简单的方法”,但看看这是否适合您。

我建议使用第三方组件(例如 numba )将您的代码转换为编译后的机器代码,以便在需要时“及时” 利用某些并行架构的强大功能,例如 NVIDIA GPUs或者你自己的多核CPU。这样您就不需要处理并行优化的麻烦。

由于每个代码/应用程序都有自己的逻辑和流程,我无法指定代码的确切转换,但在我看来,这是一条很好的路线,可以遵循,(希望)不需要太多更改您的代码。

关于python - 使用Python并行操作对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54311418/

相关文章:

python - 更新 Python Pickle 对象

c++ - 如何使用boost库创建分布式属性映射?

python - 使用 python 从网站中仅提取 'strong' 标题后的要点

python - 基于另外两个列表在 Python 中创建列表?

java - 使用java web/Java EE设计并行计算应用程序

algorithm - 数据结构 Parallel Add Serial Remove Needed

c++ - 在 C++ 中使用 OpenMP 并行化递归函数

sql - 这种方法可以扩展 SQL 查询吗?

Python 递归函数调用次数过多

python - 不满足条件的第一个值的索引 Numpy