Я хотел бы использовать многопроцессорность в python с функциями генератора
Допустим, у меня есть огромный список списков big_list
, и я хотел бы использовать многопроцессорность для вычисления значений. Если я использую «традиционные» функции, которые возвращают значения, это просто:
import concurrent
def compute_function(list_of_lists):
return_values = [] ## empty list
for list in list_of_lists:
new_value = compute_something(list) ## compute something; just an example
return_values.append(new_value) ## append to list
return return_values
with concurrent.futures.ProcessPoolExecutor(max_workers=N) as executor:
new_list = list(executor.map(compute_function, big_list))
Однако использование списков таким способом требует слишком много памяти. Поэтому я хотел бы использовать вместо этого функции генератора:
import concurrent
def generator_function(list_of_lists):
for list in list_of_lists:
new_value = compute_something(list) ## compute something; just an example
yield new_value
with concurrent.futures.ProcessPoolExecutor(max_workers=N) as executor:
new_list = list(executor.map(generator_function, big_list))
Моя проблема в том, что вы не можете работать с генераторами. Есть некоторые обходные пути для этой проблемы для других структур данных, но не для генераторов, я думаю.
Как я мог выполнить sh это?