Предположим, у меня есть следующий объект с несколькими дорогими свойствами, например:
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)