我编写了一个带有多处理的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机器上运行此代码。
答案 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))