Skip to main content

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.

Source Distribution

aioerl-0.0.20200813.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

aioerl-0.0.20200813-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file aioerl-0.0.20200813.tar.gz.

File metadata

  • Download URL: aioerl-0.0.20200813.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.9 CPython/3.8.2 Linux/4.15.0-112-generic

File hashes

Hashes for aioerl-0.0.20200813.tar.gz
Algorithm Hash digest
SHA256 b25fd8825385aaf9e264897658b0a8c73503c93ac931b3ee751d0fc471a9a1f1
MD5 7d924970f1fb093e81627da914fdd7f9
BLAKE2b-256 304e4c6b60d62e825057b0ff3707a80a4b1c74532343f7a6ede45e99e3168780

See more details on using hashes here.

File details

Details for the file aioerl-0.0.20200813-py3-none-any.whl.

File metadata

  • Download URL: aioerl-0.0.20200813-py3-none-any.whl
  • Upload date:
  • Size: 17.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.9 CPython/3.8.2 Linux/4.15.0-112-generic

File hashes

Hashes for aioerl-0.0.20200813-py3-none-any.whl
Algorithm Hash digest
SHA256 da6649f6343b84773ec13975c2463220c4c695fb04f1074bf374096a6ed0a383
MD5 d15680dbf6d4a62e88803446d46b5a4a
BLAKE2b-256 5edf17a4e5cb8bc76f3e7cd3cc5a6abeff1803c70ce49fccf8b0bba30596e7ef

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page