Я сейчас обрабатываю список из 600 предметов.Каждый элемент выполняет REST-вызов на другой сервер, на котором я жду некоторого периода неизвестного времени, чтобы сервер вернулся ко мне.В настоящее время я не выполняю многопроцессорную обработку, поэтому мне нужно подождать, пока каждый сервер ответит элемент за элементом, прежде чем перейти к следующему элементу.
Я хочу ускорить это, выполнив несколько вызовов REST одновременно, а затемобрабатывая их, как они возвращаются.Каждый элемент независим, поэтому мне не нужно ждать обработки одного элемента, чтобы перейти к следующему.Я думаю, что самый быстрый код сделает все 600 вызовов REST одновременно?Я не получу никаких тайм-аутов сервера, потому что я пингую 600 отдельных серверов.
Это то, что я имею до сих пор.Кажется, это намного быстрее, чем просто проходить каждый пункт без какой-либо оптимизации.Можем ли мы сделать это еще быстрее?
from multiprocessing import Process cpu_count
import time
def print_something(something):
time.sleep(1)
print(something)
# Make REST CALL
# Process data returned from server
def multiprocess_list(items):
procs = []
for item in items:
proc = Process(target=print_something, args=(item,))
procs.append(proc)
proc.start()
for proc in procs:
proc.join()
if __name__ == "__main__":
print(cpu_count()) # I get 4
colors = ['Black', 'Yellow', 'Green', 'Red', "Blue", "Beige", "Orange", "Burgundy", "Pink", "Brown"]
START_TIME = time.clock()
# Method 1
multiprocess_list(colors) # 1.60 seconds
# No multiprocessing # 10 seconds
# for color in colors:
# print_something(color)
print(f"I took {time.clock() - START_TIME} seconds to complete")