Skip to content

Instantly share code, notes, and snippets.

@bm371613
Last active August 29, 2015 14:21
Show Gist options
  • Save bm371613/53e242342f0220073ae5 to your computer and use it in GitHub Desktop.
Save bm371613/53e242342f0220073ae5 to your computer and use it in GitHub Desktop.
Python3 asyncio example: double TCP adding server
import asyncio
class Server:
def __init__(self, loop):
self.loop = loop
self.counter = 0
self.server_add = None
self.server_result = None
def set_up(self):
coro_add = asyncio.start_server(self.handle_add, '127.0.0.1', 8888, loop=self.loop)
self.server_add = self.loop.run_until_complete(coro_add)
coro_result = asyncio.start_server(self.handle_result, '127.0.0.1', 9999, loop=self.loop)
self.server_result = self.loop.run_until_complete(coro_result)
def tear_down(self):
self.server_result.close()
self.loop.run_until_complete(self.server_result.wait_closed())
self.server_add.close()
self.loop.run_until_complete(self.server_add.wait_closed())
@asyncio.coroutine
def handle_add(self, reader, writer):
writer.close()
while not reader.at_eof():
data = yield from reader.readline()
message = data.decode().strip()
try:
self.counter += int(message)
except ValueError:
pass
@asyncio.coroutine
def handle_result(self, reader, writer):
writer.write(str(self.counter).encode())
yield from writer.drain()
writer.close()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
server = Server(loop)
server.set_up()
try:
loop.run_forever()
except KeyboardInterrupt:
pass
server.tear_down()
loop.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment