Created
May 20, 2018 16:22
-
-
Save diogommartins/7f6c2a473721aa2219f28ef1382f0972 to your computer and use it in GitHub Desktop.
async logger POC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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