我一直在阅读有关Python的多处理模块的信息。我仍然认为我对它可以做什么没有很好的了解。
假设我有一个四核处理器,并且我有一个包含1000000个整数的列表,我想要所有整数的总和。我可以简单地做:
list_sum = sum(my_list)
但这仅将其发送到一个内核。
是否有可能使用多处理模块将数组划分为多个,并让每个核获得其部分的总和并返回值,以便可以计算总和?
就像是:
core1_sum = sum(my_list[0:500000]) #goes to core 1 core2_sum = sum(my_list[500001:1000000]) #goes to core 2 all_core_sum = core1_sum + core2_sum #core 3 does final computation
任何帮助,将不胜感激。
是的,可以对多个进程进行这种求和,非常类似于对多个线程执行此求和:
from multiprocessing import Process, Queue def do_sum(q,l): q.put(sum(l)) def main(): my_list = range(1000000) q = Queue() p1 = Process(target=do_sum, args=(q,my_list[:500000])) p2 = Process(target=do_sum, args=(q,my_list[500000:])) p1.start() p2.start() r1 = q.get() r2 = q.get() print r1+r2 if __name__=='__main__': main()
但是,与在单个进程中进行处理相比,在多个进程中进行处理的速度可能会更慢,因为来回复制数据要比立即求和更为昂贵。