No project description provided
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 spawn_monitored, receive, reply, send, run
async def ping_pong():
while True:
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_monitored(ping_pong())
await send(p, "ping")
print(await receive()) # Message(sender=<ErlProc:2>, event='ok', body='pong')
await send(p, "pang")
print(await receive()) # Message(sender=<ErlProc:2>, event='err', body=Exception("Invalid message body"))
await send(p, "ping")
print(await receive()) # Message(sender=<ErlProc:2>, event='exit', body='noproc')
if __name__ == "__main__":
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
aioerl-0.0.20190425.2.tar.gz
(16.7 kB
view details)
File details
Details for the file aioerl-0.0.20190425.2.tar.gz
.
File metadata
- Download URL: aioerl-0.0.20190425.2.tar.gz
- Upload date:
- Size: 16.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a1f3f1f3e058d289ad8a4b04d9b17be87885a0862dc63b470e867b78c054e00b |
|
MD5 | 6b6ec016dec4c2e9fc7bd5c272314546 |
|
BLAKE2b-256 | 2d8d9c77f7a62bf545e4d7b69f77466ff8ddb0c0eb25f37127d49422f05b8db3 |