Python-处理数组中项目的最快方法,每个项目都有保证的延迟

时间:2019-02-18 03:01:19

标签: python performance rest server multiprocessing

我目前正在处理600个项目的清单。每个项目都会对其他服务器进行REST调用,在该服务器中,我会等待一段未知的时间,以便该服务器返回给我。我目前未进行任何多处理,因此我必须等待每个服务器逐项响应,然后才能继续进行下一个项目。

我想通过同时进行多个REST调用,然后在它们回来时对其进行处理来加快处理速度。每个项目都是独立的,因此我无需等待要处理的一个项目即可移至下一个项目。我认为可能最快的代码将同时进行所有600个REST调用?我不会对任何服务器超时,因为我要对600个单独的服务器执行ping操作。

这是我到目前为止所拥有的。它似乎比不做任何优化就完成每个项目要快得多。我们可以使其更快吗?

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")

0 个答案:

没有答案