小编典典

Python:多核处理?

python

我一直在阅读有关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

任何帮助,将不胜感激。


阅读 215

收藏
2020-12-20

共1个答案

小编典典

是的,可以对多个进程进行这种求和,非常类似于对多个线程执行此求和:

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

但是,与在单个进程中进行处理相比,在多个进程中进行处理的速度可能会更慢,因为来回复制数据要比立即求和更为昂贵。

2020-12-20