前段時間,專案裡用到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是乙個以...