Create nyasync library
The library contains helpers for more ergonomic use of asyncio.
This commit is contained in:
parent
f95dc7f3e4
commit
2466c20059
48
grzegorz/nyasync.py
Normal file
48
grzegorz/nyasync.py
Normal file
@ -0,0 +1,48 @@
|
||||
import asyncio
|
||||
|
||||
def ify(func):
|
||||
"""Decorate func to run async in default executor"""
|
||||
asyncloop = asyncio.get_event_loop()
|
||||
async def asyncified(*args, **kwargs):
|
||||
return await asyncloop.run_in_executor(
|
||||
None, lambda: func(*args, **kwargs))
|
||||
return asyncified
|
||||
|
||||
class Queue(asyncio.Queue):
|
||||
__anext__ = asyncio.Queue.get
|
||||
|
||||
def __aiter__(self):
|
||||
return self
|
||||
|
||||
class Event:
|
||||
def __init__(self):
|
||||
self.monitor = asyncio.Condition()
|
||||
|
||||
def __aiter__(self):
|
||||
return self.monitor.wait()
|
||||
|
||||
async def notify(self):
|
||||
with await self.monitor:
|
||||
self.monitor.notify_all()
|
||||
|
||||
class Condition:
|
||||
def __init__(self, predicate):
|
||||
self.predicate = predicate
|
||||
self.monitor = asyncio.Condition()
|
||||
|
||||
def __aiter__(self):
|
||||
return self.monitor.wait_for(self.predicate)
|
||||
|
||||
async def notify(self):
|
||||
with await self.monitor:
|
||||
self.monitor.notify_all()
|
||||
|
||||
class UnixConnection:
|
||||
def __init__(self, path):
|
||||
(self.reader, self.writer) = await asyncio.open_unix_connection(path)
|
||||
|
||||
def __aiter__(self):
|
||||
return self.reader.__aiter__()
|
||||
|
||||
def write(self, data):
|
||||
return self.writer.write(data);
|
Loading…
Reference in New Issue
Block a user