Как заменить вложенный цикл на concurrent.futures? - PullRequest
2 голосов
/ 10 ноября 2019

Скажем, у меня есть следующие циклы:

for i in range(50):
   for j in range(50):
      for k in range(50):
         for l in range(50):
             some_function(i,j,k,l)

some_function оказывается веб-шабером для большого количества маленьких файлов, поэтому имеет смысл распараллелить это.

Но, насколько я могу судить, concurrent.futures принимает только один итератор, поэтому я не уверен, как к этому подойти. То, что я мог бы сделать, это выразить (два) их как один итератор, такой как:

def in_between_function(a):
    x = math.floor(a/5)
    y = a % y
    some_function(x,y)

with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
   future = executor.map(in_between_function, range(50*50))

Это не выглядит слишком плохо, но я хочу сделать это правильно;если я добавлю это к большему количеству итераторов, отрицательных чисел или если итератор не является линейным, то это будет кошмарным сном.

...