跳转到主要内容

一个模仿Erlang进程哲学的asyncio任务Python库

项目描述

aioerl

PyPI version

aioerl是一个Python库,模仿了Erlang进程的哲学,使用asyncio任务。

实现以下思想

  • 每个进程都有一个邮箱:一个队列,用于接收来自其他进程的消息。
  • 消息传递:进程完全通过消息进行通信(从开发者的角度来看)
  • 监督器/监视器:进程可以监视其他进程(当一个进程死亡或崩溃时,将退出原因或异常的消息发送给其监督器)

为什么?

asyncio很棒,并且内置结构如asyncio.Queue非常适合在任务之间进行通信,但管理错误很困难。

使用aioerl,进程只需等待来自其他进程的传入消息,并决定对每个事件进行什么操作(见示例)。

快速入门

要求:Python 3.7+

安装

pip install aioerl

示例

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())

待办事项

很多事!

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

aioerl-0.0.20200813.tar.gz (17.1 kB 查看哈希值)

上传时间 源代码

构建版本

aioerl-0.0.20200813-py3-none-any.whl (17.8 kB 查看哈希值)

上传时间 Python 3

支持者