Ich spiele mit asyncio
UDP server example und möchte eine sleep
aus der datagram_received
Methode haben.asyncio.sleep von innerhalb eines UDP-Servers funktioniert nicht
import asyncio
class EchoServerProtocol:
def connection_made(self, transport):
self.transport = transport
def datagram_received(self, data, addr):
message = data.decode()
print('Received %r from %s' % (message, addr))
# Sleep
await asyncio.sleep(1)
print('Send %r to %s' % (message, addr))
self.transport.sendto(data, addr)
loop = asyncio.get_event_loop()
print("Starting UDP server")
# One protocol instance will be created to serve all client requests
listen = loop.create_datagram_endpoint(EchoServerProtocol,
local_addr=('127.0.0.1', 9999))
transport, protocol = loop.run_until_complete(listen)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
transport.close()
loop.close()
Dieser schlägt mit einem SyntaxError
auf Schlaf Linie (Python 3.5.1). Die Verwendung von time.sleep
funktioniert offensichtlich nicht, da es verhindert, dass ein anderes Datagramm empfangen wird. Irgendwelche Hinweise, wie man das löst?
Ziel ist es, diese sleep
durch einen echten nicht blockierenden E/A-Aufruf zu ersetzen.
Beachten Sie, dass 'ensure_future' nur die Ausführung plant. Sie haben keine Garantie wann/wie (mit Fehler) wird es abgeschlossen, wenn überhaupt. – kwarunek