Если ваша цель - вычислить что-то многопроцессорным способом, лучше не делиться государством. я предлагаю вам использовать простой map
из multiprocessing, если это возможно:
from multiprocessing import Pool
input_list = []
for i in list1:
for j in list2:
input_list.append((i, j))
p = Pool()
result_list = p.map(do_something, input_list)
map
работает как для цикла:
def naive_map(input_list, do_something):
result = []
for i in input_list:
result.append(do_something(i))
return result
Итак, если вы хотите использовать функцию, которая принимает несколько аргументов, вы может использовать лямбда-функцию для распаковки кортежа.
>> def your_function(v1, v2):
>> return v1+v2
>> f = lambda (x,y): your_function(x, y)
>> map(f, [(1,2),(3,4),(5,6)])
[3, 7, 11]
Это 'ThreadPoolExecutor' из библиотеки' concurrent.futures'? Если это так, я не думаю, что у него есть метод join. Вы имели в виду 'shutdown'? –
Что происходит в 'execute_run'? Зависит ли результат от предыдущего выполнения? – Jimilian
Мне в основном нужно место, где каждая нить может помещать результаты, возможно список, таким образом, чтобы не было условий гонки. – Bobo