uvio

asyncio replacement library using libuv


License
Other
Install
pip install uvio==0.0.1

Documentation

uvio

Alternative for python asyncio based on libuv.

Just like asyncio, this module provides infrastructure for writing single-threaded concurrent code using coroutines, multiplexing I/O access over sockets and other resources, running network clients and servers, and other related primitives.

Installation

Install libuv. sorry no conda package yet

git clone https://github.com/srossross/uvio
python setup.py install

Network

from uvio import run
from uvio.net import connect, listen

async def echo_server(server, socket):

    @socket.data
    def echo(buf):
        socket.write(b"echo: " + buf)

    socket.resume()


@run(timout=1)
async def main():

    server = await listen("127.0.0.1", 80, echo_server)

    client = await connect("127.0.0.1", 80)

    @client.data
    def msg(client, data):
        print("The server echoe me", data)

        server.close()
        client.close()


    await client.write(b"this is a test")


File IO

from uvio import fs

async with fs.open('test_write.txt', 'w') as fd:
    n = await fd.write(b"Hello World")

Subprocess

from uvio.process import Popen, PIPE
echo = await Popen(['echo', 'hello world'], stdout=PIPE)

@echo.stdout.data
def output(buf):
    print("program output:", buf)

print('echo exited with status code', await echo.returncode)

Pipe output from one process to another

from uvio.process import Popen, PIPE
echo = await Popen(['echo', 'hello world'], stdout=PIPE)
cat = await Popen(['cat', '-'], stdin=PIPE, stdout=sys.stdout)

echo.stdout.pipe(cat.stdint)

print('cat exited with status code', await cat.returncode)

Worker Threads

For any other calls that are not covered by this library you can wrap blocing calls in a worker.


from libuv
def blocking(i, name):
    # This is not an async sleep! This will block the program

    # This will raise TypeError if i is not an int
    time.sleep(int(i))

    value = "Hello: {}".format(name)
    return value


async def callback():
    nonlocal called

    try:
        value = await worker(blocking, 'Fail', "Tester")
    except TypeError:
        print("caught exception in a thread! cool.")

    value = await worker(blocking, 1, "Tester")