Python中的多进程和并行性

时间:2016-02-25 21:58:55

标签: python multithreading scapy

我正在编写一个使用scapy进行数据包嗅探和解析的Python脚本。这一切都运行良好,我决定尝试将其作为多线程脚本来处理更高流量的处理。

基本的想法是,如果scapy看到一个有趣的数据包,将它扔进队列,让所有工作人员从队列中获取数据包,处理它,然后再返回另一个数据包。这个循环只运行一次,所以我猜测当脚本回到scapy方面时,它不会放手。

我怎样才能得到这个,以便scapy继续在队列中抛出数据包,我的线程可以继续处理排队的数据包?

from scapy.all import *
from Queue import Queue
from threading import Thread
max_threads=10

packetqueue=Queue(maxsize=0)

def queue_packet(packet):
        packetqueue.put(packet)

def analyze_packet(q):
        while True:
                packet=q.get()
                <do stuff to packet>
                q.task_done()

for i in range(max_threads):
        worker=Thread(target=analyze_packet,args=(packetqueue,))
        worker.setDaemon(True)
        worker.start()

sniff(iface="eth4", filter = "<filter>", store=0, prn=queue_packet)

0 个答案:

没有答案