Skip to content

Instantly share code, notes, and snippets.

@diogommartins
Created May 20, 2018 16:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diogommartins/7f6c2a473721aa2219f28ef1382f0972 to your computer and use it in GitHub Desktop.
Save diogommartins/7f6c2a473721aa2219f28ef1382f0972 to your computer and use it in GitHub Desktop.
async logger POC
import asyncio
import sys
from asyncio.streams import StreamWriter
from asyncio.unix_events import _set_nonblocking
class StdoutProtocol(asyncio.Protocol):
pass
class StderrProtocol(asyncio.Protocol):
pass
class AsyncLogger:
def __init__(self, stdout_writer: StreamWriter, stderr_writer: StreamWriter):
self.stdout_writer = stdout_writer
self.stderr_writer = stderr_writer
@classmethod
async def init_async(cls, loop=None):
loop = loop or asyncio.get_event_loop()
_set_nonblocking(sys.stdin.fileno())
_set_nonblocking(sys.stdout.fileno())
stdout_write_pipe = loop.connect_write_pipe(StdoutProtocol, sys.stdout)
stdout_transport, stdout_protocol = await stdout_write_pipe
stdout_writer = StreamWriter(transport=stdout_transport,
protocol=stdout_protocol,
reader=None,
loop=loop)
stderr_write_pipe = loop.connect_write_pipe(StderrProtocol, sys.stderr)
stderr_transport, stderr_protocol = await stderr_write_pipe
stderr_writer = StreamWriter(transport=stderr_transport,
protocol=stderr_protocol,
reader=None,
loop=loop)
return cls(stdout_writer, stderr_writer)
loop = asyncio.get_event_loop()
loop.run_until_complete(AsyncLogger.init_async())
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment