python nfqueue執行緒阻塞問題的解決方法

2021-07-25 20:00:19 字數 1818 閱讀 5062

前段時間,專案裡用到python-nfqueue,但是遇到乙個問題,當網絡卡裡沒有資料時,監控執行緒被阻塞。話不多說,先來一段**:

t2 = threading.thread(target=self.start_nfqueue)

t2.daemon = true

t2.start()   ### 啟動nfqueue

p = threading.thread(target=self.check_dev_status,

args=('130.0.0.50'

, 7313))

p.daemon = true

p.start() ### 啟動監控執行緒

defstart_nfqueue(self):

print"setting callback"

q.set_callback(cb)

print"creating queue"

q.create_queue(0)

q.set_queue_maxlen(50000)

print"trying to run"

try:

q.try_run()

exceptkeyboardinterrupt

, e:

print"interrupted"

print"unbind"

q.unbind(af_inet)

print"close"

q.close()

被這個問題困擾了幾天,翻了下nfqueue原始碼,發現乙個非同步介面asyncore,直接上**:

defstart_nfqueue(self):

self.async_queue = asyncnfqueue(self.cb)

asyncore.loop()

classasyncnfqueue(asyncore.file_dispatcher):

def__init__(self

, cb, nqueue=0

, family=af_inet, maxlen=5000

, map=none):

self._q = nfqueue.queue()

self._q.set_callback(cb)

self._q.fast_open(nqueue, family)

self._q.set_queue_maxlen(maxlen)

self.fd = self._q.get_fd()

asyncore.file_dispatcher.__init__(self

, self.fd, map)

self._q.set_mode(nfqueue.nfqnl_copy_packet)

defhandle_read(self):

print"processing at most 5 events"

self._q.process_pending(5)

defwritable(self):

returnfalse

至此,問題解決。

執行緒!執行緒!!執行緒!!! Delphi版

以下內容僅供初學者參考 看到有的同學對delphi的執行緒認識不夠深,特開一貼給同學們講講。主要給出兩種常用的執行緒形式。1 長等待型執行緒示例,等待命令,執行不定長的工作,但每個工作的時間不會太長。2 長工作型執行緒示例,執行乙個很長時間的工作,但可以很快響應取消操作。以下程式所用的知識為 訊息機...

執行緒 執行緒控制代碼 執行緒ID

什麼是控制代碼 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以...

執行緒 執行緒控制代碼 執行緒ID

什麼是控制代碼 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以...