问题描述
这里是情况:
- 类中有一个带有
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 (将#修改为@)