我在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计算。这需要很长时间,无法生成数千个数据包。
有简单的方法吗?
您必须将数据包列表分成块,并让进程为您完成任务。
EDIT: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)