Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. import asyncio
  2. import aiofiles as aiof
  3. import logging
  4. import sys
  5.  
  6.  
  7. ADDRESS = ("localhost", 10000)
  8.  
  9. logging.basicConfig(level=logging.DEBUG,
  10. format="%(name)s: %(message)s",
  11. stream=sys.stderr)
  12.  
  13. log = logging.getLogger("main")
  14. loop = asyncio.get_event_loop()
  15.  
  16.  
  17. async def server(reader, writer):
  18. log = logging.getLogger("process at {}:{}".format(*ADDRESS))
  19. paths = await reader.read()
  20. in_fp, out_fp = paths.splitlines()
  21. log.debug("connection accepted")
  22. log.debug("processing file {!r}, writing output to {!r}".format(in_fp, out_fp))
  23. async with aiof.open(in_fp, loop=loop) as inp, aiof.open(out_fp, "w", loop=loop) as out:
  24. async for line in inp:
  25. print(line.upper(), file=out)
  26. writer.write(b"done")
  27. await writer.drain()
  28. log.debug("closing")
  29. writer.close()
  30. return
  31.  
  32.  
  33. factory = asyncio.start_server(server, *ADDRESS)
  34. server = loop.run_until_complete(factory)
  35. log.debug("starting up on {} port {}".format(*ADDRESS))
  36.  
  37. try:
  38. loop.run_forever()
  39. except KeyboardInterrupt:
  40. pass
  41. finally:
  42. log.debug("closing server")
  43. server.close()
  44. loop.run_until_complete(server.wait_closed())
  45. log.debug("closing event loop")
  46. loop.close()
  47.  
  48. import asyncio
  49. import logging
  50. import sys
  51. import random
  52.  
  53. ADDRESS = ("localhost", 10000)
  54. MESSAGES = ["/path/to/a/big/file.txtn",
  55. "/output/file_{}.txtn".format(random.randint(0, 99999))]
  56.  
  57. logging.basicConfig(level=logging.DEBUG,
  58. format="%(name)s: %(message)s",
  59. stream=sys.stderr)
  60.  
  61. log = logging.getLogger("main")
  62. loop = asyncio.get_event_loop()
  63.  
  64. async def client(address, messages):
  65. log = logging.getLogger("client")
  66. log.debug("connecting to {} port {}".format(*address))
  67. reader, writer = await asyncio.open_connection(*address)
  68. writer.writelines([bytes(line, "utf8") for line in messages])
  69. if writer.can_write_eof():
  70. writer.write_eof()
  71. await writer.drain()
  72.  
  73. log.debug("waiting for response")
  74. response = await reader.read()
  75. log.debug("received {!r}".format(response))
  76. writer.close()
  77. return
  78.  
  79.  
  80. try:
  81. loop.run_until_complete(client(ADDRESS, MESSAGES))
  82. finally:
  83. log.debug("closing event loop")
  84. loop.close()
  85.  
  86. asyncio: Using selector: KqueueSelector
  87. main: starting up on localhost port 10000
  88. process at localhost:10000: connection accepted
  89. process at localhost:10000: processing file b'/path/to/a/big/file.txt', writing output to b'/output/file_79609.txt'
  90. process at localhost:10000: connection accepted
  91. process at localhost:10000: processing file b'/path/to/a/big/file.txt', writing output to b'/output/file_68917.txt'
  92. process at localhost:10000: connection accepted
  93. process at localhost:10000: processing file b'/path/to/a/big/file.txt', writing output to b'/output/file_2439.txt'
  94. process at localhost:10000: closing
  95. process at localhost:10000: closing
  96. process at localhost:10000: closing
  97.  
  98. asyncio: Using selector: KqueueSelector
  99. client: connecting to localhost port 10000
  100. client: waiting for response
  101. client: received b'done'
  102. main: closing event loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement