高效轻量的多处理

问题描述

这里是情况:

  • 类中有一个带有for循环的方法,该方法可能具有数以万计的迭代次数
  • for循环中,有一些使用self.引用对象成员的引用(即,检索了一些实例成员以进行读取和写入)
  • 循环会在输入之前更新定义的列表(但并非循环中的所有路径都会导致对append()调用

使用multiprocessing.Pool并传递“大量”对象的原始实现大大降低了执行速度。我尝试使用multiprocessing.Manager及其Namespace(),但似乎对效率/轻量化要求没有帮助。我阅读了suggestion以使用shared ctypes objects(例如multiprocessing.sharedctypesctypes.Structure)。但是,鉴于要共享的对象的异构性和复杂性(其他类的对象列表,值是其他类的对象的字典等),我不确定最好的方法是什么。我是否需要为所有这些Python类定义然后初始化ctypes结构?似乎没有道理。这一切都要归功于GIL ...请注意,所有操作都是cpu驱动的,而不是I / O。任何意见或建议都非常感谢。

示例(不完整)代码

outer_list = [...]
for item in some_list:
    ...
    tmp = self.a ...
    ...
    self.b.append(...)
    ...
    if ...:
        outer_list.append(...)
    else:
        ...
    ...

self.main_list = outer_list

根据情况,some_list可能有少量或数百或数千个元素。

解决方法

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

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

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