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.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | b25fd8825385aaf9e264897658b0a8c73503c93ac931b3ee751d0fc471a9a1f1 |
|
MD5 | 7d924970f1fb093e81627da914fdd7f9 |
|
BLAKE2b-256 | 304e4c6b60d62e825057b0ff3707a80a4b1c74532343f7a6ede45e99e3168780 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | da6649f6343b84773ec13975c2463220c4c695fb04f1074bf374096a6ed0a383 |
|
MD5 | d15680dbf6d4a62e88803446d46b5a4a |
|
BLAKE2b-256 | 5edf17a4e5cb8bc76f3e7cd3cc5a6abeff1803c70ce49fccf8b0bba30596e7ef |