在 Python 和冗长的 Rust 模块之间双向发送数据?

问题描述 投票:0回答:1

对使用 PyO3 将 Rust 模块集成到调用 Python 应用程序中的轻松程度感到惊喜。

但是我想了解的下一件事是是否可以在可能长时间运行的 Rust 模块和 Python 代码之间交换数据。典型的情况是 Python 正在处理 GUI(例如 PyQt),并且用户可能希望中途终止这个长时间运行的 Rust 模块。因此,希望 Rust 模块能够检测到一种优雅的中断机制。 “优雅”往往意味着不使用

SIGINT
,我认为......

但是 Rust 还需要能够向另一个方向发送信号:典型的情况是在 GUI 中更新进度指示器。但在另一种情况下,实际重要的对象可能需要从 Rust 代码“剥离”并被 Python 代码“捕获”。

这一切可能吗?我能想到一个极其笨重的机制:文件。如果 Python 代码想要中断,它会在磁盘上创建一个特定文件。冗长的 Rust 代码不断检查这样的文件是否存在,以及指令是什么。这种文件机制也可以用于另一个方向的数据流。

但我希望有比这更好的方法。我做了一些搜索,但没有发现任何非常明显的东西。一个有趣的评论说“也许使用crossbeam-channel来允许Python和Rust之间的通信,使Python能够向Rust程序发送信号/中断?”。我查看了 crossbeam-channel,但没有看到任何解决这种情况的方法。

当然我也看了PyO3。各个线程/进程之间似乎没有任何通信(注意,我还不清楚被调用的 Rust 模块实际上是否在与调用 Python 不同的“进程”中运行,但我假设是这样)。

python multithreading rust signals pyo3
1个回答
0
投票

最佳解决方案似乎已解释为

here

,选项3,zeromq 设法在几分钟内获取 Python 和 Rust 之间的简单消息(在 W10 上)。

© www.soinside.com 2019 - 2024. All rights reserved.