Python Scapy使用多个CPU

时间:2015-10-29 15:30:55

标签: python multiprocessing scapy python-multiprocessing

我很难解决这样一个事实:我在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计算。这需要很长时间才能生成数千个数据包。

有一种简单的方法吗?

1 个答案:

答案 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)