Python - самый быстрый способ обработки элементов в массиве с гарантированной задержкой для каждого элемента - PullRequest
0 голосов
/ 18 февраля 2019

Я сейчас обрабатываю список из 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")
...