Я хочу запустить 2 блокирующих цикла в одной программе. В моей программе я использую nfqueue для перехвата пакетов. Когда очередь создается, она начинает ждать пакетов и блокирует программу. Когда пакет поступит, он вызовет функцию cb(), а затем снова начнет прослушивание нового пакета.Запуск 2 блокирующих петель в одной программе
Вот моя программа:
import nfqueue, socket
from scapy.all import *
import os
os.system('iptables -t mangle -A PREROUTING -j NFQUEUE --queue-num 1')
os.system('iptables -t mangle -A POSTROUTING -j NFQUEUE --queue-num 2')
count = 0
def cb(payload):
global count
count +=1
data = payload.get_data()
p = IP(data)
print str(count) + ": TOS = " + str(p.tos)
payload.set_verdict(nfqueue.NF_ACCEPT)
def run_queue(queue_num):
print "Preparing the queue"
q = nfqueue.queue()
q.open()
q.unbind(socket.AF_INET)
q.bind(socket.AF_INET)
q.set_callback(cb)
q.create_queue(queue_num)
try:
print "Running the queue"
q.try_run()
except KeyboardInterrupt, e:
print "interruption"
q.unbind(socket.AF_INET)
q.close()
run_queue(1)
run_queue(2)
Как я могу запустить 2 или более из этих блокирующих контуров в одной и той же программы?
Любая помощь будет очень признательна. Спасибо!
подсказка: вам нужно использовать потоки и запускать каждый цикл на отдельное одном – goncalopp
Но когда создаются первая нить, блокирования цикл, а затем второй поток не может быть создан – HaTiMuX
@HaTiMuX Цикл блокировки должен работать в своем потоке, поэтому он не будет блокировать выполнение основного потока. – dano