我很难解决这样一个事实:我在python中的函数,用于为Scapy生成数据包,一次只使用1个CPU。我搜索过多处理,但我真的不知道如何实现它。我也尝试使用一些ThreadPool,但结果是一样的。
以下是我的代码片段。
def code(a,b,c)
while a < b :
## build pkt 100000 times
send(pkt)
def main():
##defining some intregers a b c
code(a,b,c)
if __name__ == "__main__":
执行此操作时,while函数仅由1个CPU计算。这需要很长时间才能生成数千个数据包。
有一种简单的方法吗?
答案 0 :(得分:1)
您必须将数据包列表拆分成块,让流程为您完成工作。
编辑:Python3或并发模块是必需的。 前面的例子只是给出了一个想法。这是一个有效的解决方案。随意更改常量值。
from concurrent.futures import ProcessPoolExecutor
START = 0
END = 1000000
CHUNK_SIZE = 1000
chunks = range(START, END, CHUNK_SIZE)
def code(offset):
packets = []
chunk = offset + CHUNK_SIZE
for index in range(offset, chunk):
packet = build_packet(index)
packets.append(packet)
return packets
with ProcessPoolExecutor() as executor:
packets = []
for chunk in executor.map(code, chunks):
packets += chunk
send(packets)