a python library that mimics the philosophy of Erlang's processes with asyncio tasks
Project description
aioerl
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
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 |
Close
Hashes for aioerl-0.0.20200813-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da6649f6343b84773ec13975c2463220c4c695fb04f1074bf374096a6ed0a383 |
|
MD5 | d15680dbf6d4a62e88803446d46b5a4a |
|
BLAKE2-256 | 5edf17a4e5cb8bc76f3e7cd3cc5a6abeff1803c70ce49fccf8b0bba30596e7ef |