Tener experiencia de 1 día en Twisted Me trate de programar el envío de mensajes en respuesta a cliente TCP:Python twisted: ¿cómo programar?
import os, sys, time
from twisted.internet import protocol, reactor
self.scenario = [(1, "Message after 1 sec!"), (4, "This after 4 secs"), (2, "End final after 2 secs")]
for timeout, data in self.scenario:
reactor.callLater(timeout, self.sendata, data)
print "waited %d time, sent %s\n"%(timeout, data)
Ahora envía mensajes, pero tengo 2 problemas:
1) "tiempo de espera" va desde " now ", y quiero contarlo después de que se completó cada tarea anterior (se envió el mensaje anterior)
2) No sé cómo cerrar la conexión después de que se hayan enviado todos los mensajes. Si coloco self.transport.loseConnection()
después de callLater
s, se cierra la conexión inmediatamente.
En el intento anterior no usé reactor.callLater
, pero solo self.transport.write()
y self.transport.write()
en for
loop. En este caso, todos los mensajes se enviaron juntos después de que se superaran todos los tiempos de espera ... No es algo que quisiera.
El propósito es esperar la conexión del cliente, esperar timeout1 y enviar mensaje1, esperar timeout2 y enviar mensaje2, ... etc. Después del mensaje final - conexión cercana.
Gracias, ahora entiendo por qué "duerme" no funcionó. ¿Puedes dar un ejemplo con la programación de reactor.callLater() al final del reactor.callLater() anterior? – DominiCane
Simplemente defina una función que llame 'self.sendata (data)' y luego llame 'reactor.callLater()' para la próxima devolución de llamada, y pase esa función al primer 'reactor.callLater()' en vez de 'self.sendata ' –