Skip to content

Instantly share code, notes, and snippets.

@4383
Last active September 29, 2021 15:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 4383/14ba6178c4c9404bb8a845efbff0582b to your computer and use it in GitHub Desktop.
Save 4383/14ba6178c4c9404bb8a845efbff0582b to your computer and use it in GitHub Desktop.
asyncio - shared socket between coroutines
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import asyncio
async def init_socket (loop):
reader, writer = await asyncio.open_connection('127.0.0.1', 3000, loop=loop)
return reader, writer
async def tcp_ping(writer, loop):
while True:
print('Send: ping')
writer.write("ping".encode())
print("ping sent")
await asyncio.sleep(3)
print("sleep finished")
async def tcp_read(reader, loop):
while True:
data = await reader.read(100)
print('Received: %r' % data.decode())
def main():
reader = None
writer = None
loop = asyncio.get_event_loop()
reader, writer = loop.run_until_complete(init_socket(loop))
tasks = [
tcp_read(reader, loop),
tcp_ping(writer, loop),
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
writer.close()
if __name__ == "__main__":
main()
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import asyncio
async def ping(reader, loop):
while True:
data = await reader.read(100)
print('Received: %r' % data.decode())
if "ping" == data.decode():
timer = 0
async def send_period(reader, writer):
timer = 0
task = loop.create_task(ping(reader, loop))
while timer <= 15:
print('Send: period')
writer.write("period {}".format(timer).encode())
await writer.drain()
await asyncio.sleep(1)
timer += 1
def main():
loop = asyncio.get_event_loop()
coro = asyncio.start_server(send_period, '127.0.0.1', 3000, loop=loop)
print("before run coro")
server = loop.run_until_complete(coro)
print('Serving on {}'.format(server.sockets[0].getsockname()))
loop.run_forever()
# Close the server
server.close()
loop.run_until_complete(server.wait_closed())
loop.close()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment