我有在以下的摘錄已經簡化基於扭曲程序:扭曲`callInThread`阻止
class PacketSender(object):
def __init__(self, protocol_instance):
self._stop = False
self._protocol = protocol_instance
def send(self, pkti):
try:
pkti1 = gen_packets.next()
reactor.callInThread(self.write_packet, pkti)
except StopIteration:
self._stop = True
do_some_stuff()
if not self._stop:
reactor.callLater(pkti.iat, self.send, pkti1)
def write_packet(self, pkt):
self.protocol.transport.write(pkt)
...
reactor.run()
總結了許多,write_packet
方法將調用某一協議實例我的transport.write
方法傳遞給構造函數類A
。請注意,這是一個遞歸實現,其中方法send
調用自身以獲取通過協議發送的以下數據包。問題是,當它調用send
延遲pkt.iat
秒時,發送的執行將死於callInThread
調用,其中應該產生一個新線程並繼續執行do_some_stuff
,對嗎?所有這些代碼實際上都在另一個扭曲的線程中運行,這意味着我們在某個時刻從外部調用callInThread(packet_sender.send, pkt_0)
。
你有什麼線索可能會發生什麼?有什麼我錯過扭曲的線程如何工作?
我在文檔中找不到反應器和非反應器線程的定義。只是爲了看看我是否理解正確,是否意味着'reactor.callInThread()'會產生一個反應器線程(反應器是「reactor」)?謝謝 – synack