Python for循环中的多处理

时间:2017-08-04 08:42:06

标签: python python-multiprocessing

我编写了一个带有多处理的python代码。我没有看到太多的性能提升。我将分享下面的代码。请帮我理解是否遗漏了什么?

if len(aspackets) != len(uepackets):
    sys.exit("Packet number miss match between UE and AS")
else:
    for i in range (1,100):
        p = multiprocessing.Process(target=packet,args=(i,))
        p.start()
        #p.join()
        E2E(packet(i),i)
        Airinterface(packet(i))
        core(packet(i))
        switch(packet(i))
        inet(packet(i))
        bridge(packet(i))

数据包功能为

def packet(i):
    return aspackets[i]

在我的逻辑中,我想从100个数据包的列表开始处理多个数据包。一个数据包的处理不会影响另一个数据包。也就是说,可以同时在数据包10和33上开始计算。在正常流程中(没有多处理),我从第1个数据包到最后一个数据包进行顺序排列,并且必须等待45分钟才能得到整个结果。

我在Virtual Box中运行的Ubuntu机器上运行此代码。

1 个答案:

答案 0 :(得分:0)

使用Pool的解决方案:

from multiprocessing import Pool

def handle_packet(index):
    pac = aspackets[index]
    E2E(pac, index)
    Airinterface(pac)
    core(pac)
    switch(pac)
    inet(pac)
    bridge(pac)

with Pool(processes=10) as p:
    p.map(handle_packet, range(100))