我目前正在处理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")