【发布时间】:2019-05-11 22:09:10
【问题描述】:
假设我有以下具有多个昂贵属性的对象,如下所示:
class Object:
def __init__(self, num):
self.num = num
@property
def expensive_property(self):
return expensive_calculation
@property
def expensive_property1(self):
return expensive_calculation
@property
def expensive_property2(self):
return expensive_calculation
注意:昂贵房产的数量可能会随着时间的推移而增加。
给定Objects 的列表,我如何为列表中的所有对象计算每个线程的每个昂贵属性。我很难弄清楚我应该如何安排我的游泳池。
这就是我想要实现的目标:
from multithreading.dummy import Pool
from multithreading.dummy import Queue
object_list = [Object(i) for i in range(20)]
properties = [expensive_property2, expensive_propert5, expensive_property9, expensive_property3]
def get(obj, expensive_property):
return [getattr(expensive_property, o) for o in obj]
tasks = Queue()
for p in properties :
tasks.put((get, o, p))
results = []
with Pool(len(properties )) as pool:
while True:
task = tasks.get()
if task is None:
break
func, *args = task
result = pool.apply_async(func, args)
results.append(result)
【问题讨论】:
-
计算 CPU 密集吗? wiki.python.org/moin/GlobalInterpreterLock
-
@dm03514 不是 CPU 密集型,只是需要大量睡眠
标签: python-3.x multithreading threadpool getattr