如何解决高效轻量的多处理
这里是情况:
- 类中有一个带有
for
循环的方法,该方法可能具有数以万计的迭代次数 - 在
for
循环中,有一些使用self.
引用对象成员的引用(即,检索了一些实例成员以进行读取和写入) - 循环会在输入之前更新定义的列表(但并非循环中的所有路径都会导致对
append()
的调用
使用multiprocessing.Pool
并传递“大量”对象的原始实现大大降低了执行速度。我尝试使用multiprocessing.Manager
及其Namespace()
,但似乎对效率/轻量化要求没有帮助。我阅读了suggestion以使用shared ctypes
objects(例如multiprocessing.sharedctypes
和ctypes.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 举报,一经查实,本站将立刻删除。