python - 在方法内并行化 for 循环
问题描述
我想并行化fun2()
以下代码的 for 循环,但我不知道如何。我想将函数保留在其中class2
,这似乎就是映射到multiprocessing.Pool
不起作用的原因。但我也无法使其与multiprocessing.pool.ThreadPool
.
class class1():
def __init__(self, x):
self.var1 = x
def fun1(self):
self.result = self.var1**2
class class2():
def __init__(self, y):
self.var2 = y
def fun2(self):
for v in self.var2:
obj = class1(v)
obj.fun1()
setattr(self, 'obj_{}'.format(v), obj)
obj2 = class2(range(5))
obj2.fun2()
此代码有效,但在我的情况下非常慢,因为fun1
在我的实际程序中非常昂贵。很感谢任何形式的帮助。谢谢!
解决方案
这是一种方法。变化在class2
class class1():
def __init__(self, x):
self.var1 = x
def fun1(self):
time.sleep(1) #simulate a long-running job
self.result = self.var1**2
print (self.result)
class class2():
def __init__(self, y):
self.var2 = y
def _sub_process(self, v):
obj = class1(v)
obj.fun1()
setattr(self, 'obj_{}'.format(v), obj)
print(f"in _subprocess, v is {v}")
def fun2(self):
with multiprocessing.Pool() as p:
print(p.map(self._sub_process, self.var2))
if __name__ == "__main__":
obj2 = class2(range(5))
obj2.fun2()
推荐阅读
- java - Scanner accepts wrong input
- python - 移动矩形冻结到最终状态,而不是执行每个移动
- python - 使用 Python3,是否有一种简单的方法来过滤数据帧 [WaypointID1, WaypointID2] 以仅将起始 waypointIDs 转换为最终 waypointIDs
- java - Android 上 org.springframework.web.util.UriComponentsBuilder.newInstance 的 ExceptionInInitializerError
- html - 如何使这两个图像的大小与其包含的 div 相同?
- c - 如何计算输入的数字?
- mysql - 防止 MySQL 自动为外键创建索引?
- python - 使用 BeautifulSoup 解析 h1 标签下的表并存储在 df
- leaflet - React Leaflet 创建多个地图
- assembly - 如何在没有可用操作系统的情况下获取硬件信息