【发布时间】:2015-04-21 23:16:16
【问题描述】:
我有一个基于 Twisted 的程序,我在以下摘录中对其进行了简化:
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方法会调用我传给构造函数类A的某个协议实例的transport.write方法。请注意,这是一个递归实现,其中 send 方法调用自身以获取以下数据包以通过协议发送。问题是,当它调用 send 延迟 pkt.iat 秒时,send 的执行将在 callInThread 调用处终止,应该产生一个新线程并继续执行 do_some_stuff,对吧??所有这些代码实际上都在另一个扭曲的线程中运行,这意味着在某些时候我们从外部调用callInThread(packet_sender.send, pkt_0)。
您对可能发生的事情有任何线索吗?关于 Twisted 线程的工作方式,我是否遗漏了什么?
【问题讨论】:
标签: python multithreading networking asynchronous twisted