python - 在基于 trio 的 Python 应用程序中生成进程并在进程之间进行通信

标签 python python-3.x numpy multiprocessing python-trio

关于 Python 库的实习 fluidimage ,我们正在研究使用库 trio 编写具有客户端/服务器模型的 HPC 并行应用程序是否是个好主意。 .

对于异步编程和i/o,trio确实很棒!

然后,我想知道如何

  1. 生成进程(执行 CPU-GPU 有界工作的服务器)
  2. 在进程之间传递复杂的 Python 对象(可能包含大型 numpy 数组)。

我没有在其文档中找到用 trio 执行此操作的推荐方法(即使 the echo client/server tutorial 是一个好的开始)。

在 Python 中生成进程和进行通信的一种明显方法是使用 multiprocessing .

在 HPC 上下文中,我认为一个好的解决方案是使用 MPI ( http://mpi4py.readthedocs.io/en/stable/overview.html#dynamic-process-management )。作为引用,我还必须提到 rpyc (https://rpyc.readthedocs.io/en/latest/docs/zerodeploy.html#zerodeploy)。

我不知道是否可以将此类工具与 trio 一起使用,以及这样做的正确方法是什么。

一个有趣的相关问题

备注PEP 574

在我看来 PEP 574 (参见 https://pypi.org/project/pickle5/)也可能是解决此问题的好方法之一。

最佳答案

不幸的是,截至今天(2018 年 7 月),Trio 尚不支持子进程的生成和通信,也不支持 MPI 或其他高级进程间协调协议(protocol)的任何类型的高级包装器。

这绝对是我们最终想要达到的目标,如果您想更详细地讨论需要实现的内容,那么您可以 hop in our chat , 或 this issue概述了核心子流程支持所需的内容。但是,如果您的目标是在几个月内完成实习工作,老实说,您可能需要考虑更成熟的 HPC 工具,例如 dask .

关于python - 在基于 trio 的 Python 应用程序中生成进程并在进程之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51171145/

相关文章:

python - Selenium Python - 如何让我的程序在特定元素出现时单击它?

python - 将多个列表收集在一起

python - [pipenv.exceptions.InstallError] : ERROR: Could not find a version that satisfies the requirement django==2. 2

python - 扩展维度 xarray

python - Django model.py models.ForeignKey()

python - 任意重复 numpy 数组的内容

python - 标签 : Entering long text onto screen

python - 有多个条件时替换numpy数组中的元素

python - Matplotlib imshow 偏移量以匹配轴?

python - 平均连续的正数