0
나는 파이썬 트위스트 라이브러리를 사용하고 있으며 수신 된 데이터에서 일부 처리를 수행 한 다음 연결을 닫는 데이터를 수신하는 서버를 만들고 있습니다. 나는 프로그램이 print 문없이 dataReceived에 멈추는 것을 관찰한다. print 문을 사용하면 처리가 완료됩니다. 경주 조건을 피하기 위해 인쇄가 어떻게 든 느려지거나 버그를 코딩했는지 궁금합니다. 다음과 같이Twisted dataReceived hangs
내 코드는 다음과 같습니다
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)