[英]Twisted dataReceived hangs
我正在使用python扭曲库,并且正在使服务器接收数据以对接收到的数据进行一些处理,然后关闭连接。 我观察到该程序在没有打印语句的情况下挂在dataReceived中。 随着打印语句,它通过。 想知道打印是否会以某种方式减慢执行速度以避免出现竞争状况,或者是否编码了错误?
我的代码如下:
class Stack(Protocol):
def __init__(self, factory):
self.factory = factory
self.bytesremaining = None
self.payload = ""
self.headerseen = False
def dataReceived(self, data):
if self.headerseen == False:
header = unpack('B',data[0])[0]
if header == 128:
self.pop()
return
self.bytesremaining = self.datalength = unpack('B',data[0])[0]
print self.datalength #without this print the execution hangs in the middle.
if len(data) > 1 and (len(self.factory.pushstack) < 100):
self.payload += data[1:]
self.bytesremaining -= len(data) - 1
self.headerseen = True
elif len(self.factory.pushstack) < 100:
self.payload += data
self.bytesremaining -= len(data) - 1
if self.bytesremaining == 0:
self.factory.pushstack.appendleft(self.payload)
retval = pack('B',0)
self.transport.write(retval)
self.transport.loseConnection()
class StackFactory(ServerFactory):
def __init__(self):
self.clients = []
self.pushstack = collections.deque()
self.popstack = collections.deque()
self.clientsmap = {}
def buildProtocol(self, addr):
return Stack(self)
在我看来,OS X(选择反应器)的默认扭曲反应堆不如kqueue稳定。
安装kqueue反应器后,我再也没有看到这个问题。
from twisted.internet import kqreactor
kqreactor.install()
from twisted.internet import reactor
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.