У меня есть следующие коды.В принципе, я бы хотел выполнить итерацию long_list
и применить функцию procedure()
, которая принимает значение и другой список short_list
в качестве параметра:
def procedure(par1, the_short_list):
"""
Description of procedure
"""
o1, o2 = par1.split(" ")
out = []
for sl in the_short_list:
output = sl * int(o1) * int(o2)
out.append(output)
return out
long_list = [str(v) + " " + str(w) for v, w in enumerate(range(0,10))]
short_list = range(10,15)
#--------------------------------------------------
# Sequential
#--------------------------------------------------
for i in long_list:
out = procedure(i, short_list)
print (out)
. Получает такой результат:
[0, 0, 0, 0, 0]
[10, 11, 12, 13, 14]
[40, 44, 48, 52, 56]
[90, 99, 108, 117, 126]
[160, 176, 192, 208, 224]
[250, 275, 300, 325, 350]
[360, 396, 432, 468, 504]
[490, 539, 588, 637, 686]
[640, 704, 768, 832, 896]
[810, 891, 972, 1053, 1134]
Теперь я хочу распараллелить процесс, разбив long_list
, запустить procedure()
параллельно и, наконец, собрать результаты.
Я попробовал этот код:
#--------------------------------------------------
# Parallel
#--------------------------------------------------
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
future = executor.submit(procedure, long_list, short_list)
print(future.result())
Но это выдает эту ошибку.
Traceback (most recent call last):
File "test.py", line 33, in <module>
print(future.result())
File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/concurrent/futures/_base.py", line 462, in result
return self.__get_result()
File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/concurrent/futures/thread.py", line 63, in run
result = self.fn(*self.args, **self.kwargs)
File "test.py", line 6, in procedure
o1, o2 = par1.split(" ")
AttributeError: 'list' object has no attribute 'split'
Какой правильный способ сделать это?
Я ожидаю, что выход будет таким же, как в последовательной версии.И когда применить с гораздо большим long_list
он будет работать быстрее.