Skip to main content
Python Software Foundation 20th Year Anniversary Fundraiser  Donate today!

a python library that mimics the philosophy of Erlang's processes with asyncio tasks

Project description

aioerl

PyPI version

aioerl is a python library that mimics the philosophy of Erlang's processes with asyncio tasks.

Implements the following ideas:

  • Each process has a mailbox: a queue to receive messages from other processes.
  • Message passing: processes communicate entirely with messages (from the point of view of the developer)
  • Supervisor/monitors: processes can monitor other processes (when a process dies or crashes, sends a message to its supervisor with the exit reason or the exception)

Why?

asyncio is awesome and built-in structures like asyncio.Queue are great for communicating between tasks but is hard to manage errors.

With aioerl, a process just waits for incoming messages from other processes and decides what to do for each event (see example).

Quickstart

Requirements: Python 3.7+

Installation:

pip install aioerl

Example

from aioerl import receive
from aioerl import reply
from aioerl import send
from aioerl import spawn

import asyncio


async def ping_pong():
    while m := await receive(timeout=10):
        if m.is_ok:
            if m.body == "ping":
                await reply("pong")
            else:
                raise Exception("Invalid message body")
        elif m.is_timeout:
            return  # terminate process


async def main():
    p = await spawn(ping_pong())

    await send(p, "ping")
    print(await receive())  # Message(sender=<Proc:Task-2>, event='ok', body='pong')

    await send(p, "pang")
    print(await receive())  # Message(sender=<Proc:Task-2>, event='err', body=Exception('Invalid message body'))

    await send(p, "ping")
    print(await receive())  # Message(sender=<Proc:Task-2>, event='exit', body='noproc')


if __name__ == "__main__":
    asyncio.run(main())

TODO:

Lot of things!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for aioerl, version 0.0.20200813
Filename, size File type Python version Upload date Hashes
Filename, size aioerl-0.0.20200813-py3-none-any.whl (17.8 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size aioerl-0.0.20200813.tar.gz (17.1 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page