首页 > 解决方案 > 在基于 trio 的 Python 应用程序中生成进程并在进程之间进行通信

问题描述

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

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

然后,我想知道如何

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

我没有在其文档中找到使用 trio 执行此操作的推荐方法(即使echo 客户端/服务器教程是一个好的开始)。

在 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/)也可能是解决这个问题的好方法的一部分。

标签: pythonpython-3.xnumpymultiprocessingpython-trio

解决方案


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

这绝对是我们最终想要达到的目标,如果您想更详细地讨论需要实现的内容,那么您可以加入我们的聊天,或者这个问题概述了核心子流程支持所需的内容。但是,如果您的目标是在几个月内为您的实习提供一些工作,老实说,您可能需要考虑更成熟的 HPC 工具,例如dask


推荐阅读