跳转到主要内容

使基于消息的强大、高容量的通信变得简单。

项目描述

kiwiPy

kiwiPy Coveralls Github Actions Latest Version https://img.shields.io/pypi/pyversions/kiwipy.svg https://img.shields.io/pypi/l/kiwipy.svg https://joss.theoj.org/papers/10.21105/joss.02351/status.svg

kiwiPy 是一个库,它使得使用 RabbitMQ(以及其他可能的消息代理)进行远程消息传递变得非常简单。它被设计用于支持大数据和计算科学场景中的高吞吐量工作流程,目前已被 AiiDA 用于全球的计算材料研究。话虽如此,kiwiPy 完全通用,可以在任何需要高吞吐量和健壮消息传递的地方使用。

以下是您将获得的内容

  • RPC

  • 广播(带有过滤器)

  • 任务队列消息

让我们深入探讨,以下是一些从 rmq 教程 中取出的示例。要了解更多细节,请访问 文档

RPC

客户端

import kiwipy

with kiwipy.connect('amqp://localhost') as comm:
    # Send an RPC message
    print(" [x] Requesting fib(30)")
    response = comm.rpc_send('fib', 30).result()
    print((" [.] Got %r" % response))

(rmq_rpc_client.py 源代码)

服务器

import threading
import kiwipy

def fib(comm, num):
    if num == 0:
        return 0
    if num == 1:
        return 1

    return fib(comm, num - 1) + fib(comm, num - 2)

with kiwipy.connect('amqp://127.0.0.1') as comm:
    # Register an RPC subscriber with the name 'fib'
    comm.add_rpc_subscriber(fib, 'fib')
    # Now wait indefinitely for fibonacci calls
    threading.Event().wait()

(rmq_rpc_server.py 源代码)

工作进程

创建新任务

import sys
import kiwipy

message = ' '.join(sys.argv[1:]) or "Hello World!"

with rmq.connect('amqp://localhost') as comm:
    comm.task_send(message)

(rmq_new_task.py 源代码)

以及工作进程

import time
import threading
import kiwipy

print(' [*] Waiting for messages. To exit press CTRL+C')


def callback(_comm, task):
    print((" [x] Received %r" % task))
    time.sleep(task.count(b'.'))
    print(" [x] Done")


try:
    with kiwipy.connect('amqp://localhost') as comm:
        comm.add_task_subscriber(callback)
        threading.Event().wait()
except KeyboardInterrupt:
    pass

(rmq_worker.py 源代码)

引用

如果您直接或间接使用 kiwiPy(例如通过使用 AiiDA),

Uhrin, M., & Huber, S. P. (2020). kiwiPy:大数据和计算科学工作流程的健壮、高容量消息传递,5,4–6. http://doi.org/10.21105/joss.02351

这有助于我们继续制作社区软件。

版本管理

此软件遵循 语义版本控制

贡献

想要新功能?发现了 bug?想要贡献更多文档或翻译吗?

我们总是欢迎帮助,从 贡献指南 开始。

开发

此软件包利用 tox 进行单元测试自动化,以及 pre-commit 进行代码格式化和测试自动化。

要安装这些开发依赖项

pip install tox pre-commit

要运行单元测试

tox

对于 rmq 测试,您需要一个运行的 RabbitMQ 实例。一种实现此目的的方法是使用 Docker 并启动 test/rmq/docker-compose.yml

要运行预提交测试

pre-commit run --all

要构建文档

tox -e docs-clean

更改应以拉取请求(PR)的形式提交给 develop 分支。

发布版本

  1. 创建一个指向 develop 分支的发布 PR/commit,更新 kiwipy/version.pyCHANGELOG.md

  2. develop 合并到 master 分支

  3. 在 GitHub 上创建一个发布版本(https://github.com/aiidateam/kiwipy/releases/new),指向 master 上的发布提交,命名为 v.X.Y.Z(与 kiwipy/version.py 中的版本相同)

  4. 这将触发 continuous-deployment GitHub 工作流程,如果所有测试都通过,则会将软件包发布到 PyPi。请检查是否在 GitHub Actions 选项卡(https://github.com/aiidateam/kiwipy/actions)中成功完成。

(如果发布失败,请删除发布和标签)

项目详情


下载文件

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

源代码分发

kiwipy-0.8.4.tar.gz (40.8 kB 查看哈希值)

上传时间 源代码

构建分发

kiwipy-0.8.4-py3-none-any.whl (41.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面