Ich benutze Python verdrehte Bibliothek und mache einen Server, um Daten zu empfangen, um einige Verarbeitung für die empfangenen Daten zu tun und dann die Verbindung zu schließen. Ich beobachte, dass das Programm in dataReceived ohne eine Druckanweisung hängt. Mit print statement geht es durch. Sie fragen sich, ob der Druck irgendwie die Ausführung verlangsamt, um den race condition zu vermeiden, oder wenn ich einen Fehler programmiert habe?Twisted dataReceived hängt
Mein Code ist wie folgt:
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)