关于 Python 库的实习 fluidimage ,我们正在研究使用库 trio 编写具有客户端/服务器模型的 HPC 并行应用程序是否是个好主意。 .
对于异步编程和i/o,trio确实很棒!
然后,我想知道如何
- 生成进程(执行 CPU-GPU 有界工作的服务器)
- 在进程之间传递复杂的 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/