Java - Python 共享内存通信

标签 java python ipc

我们有一个 Java 程序和一个 Python 程序,需要让它们以乒乓方式组合在一起,每次交换一个长度为 100,000 的整数数组,并花费大约 0.1 - 1 秒来完成它们的工作:

  1. Java 做一些工作并触发一个长度为 100,000 的 int 数组到 ...
  2. Python,它会做一些工作并将长度为 100,000 的新数组返回给 ...
  3. Java,做一些工作...等等

注意

  • 每个程序都需要等待另一个程序完成它的一部分。
  • 它们将在同一台 Linux 机器上运行。
  • 我们将进行蒙特卡罗模拟,因此速度很重要。

我更熟悉 Java,并且知道共享内存支持的文件方法可能是最快的。 This似乎与 Java 方面相关,但我如何让每个程序等待/阻止另一个程序完成其工作并在另一个程序开始读取之前更新共享内存?我听说过一种叫做“信号量”的东西,但想不通。

这些是我的后备想法,但也许它们更好?

最佳答案

寻找一个快速的中间数据服务器来协助它们之间的通信。 Redis 可以解决问题。你需要两个数据结构:

  1. 列表(您的 100,000 项列表)。我们将其称为 my_project:list 以供引用。
  2. 一把锁。这可以只是设置为“Python”或“Java”的 Redis 字符串。

然后进行如下交互:

  1. Python 和 Java 都轮询 Redis 锁。如果等于“Python”,则轮到 Python。如果是“Java”,则轮到 Java。
  2. 轮到哪个程序进入工作模式并对 my_project:list 执行任何需要的操作,然后将锁定设置为轮到另一个程序。
  3. 无限期地重复。

关于Java - Python 共享内存通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697708/

相关文章:

java - 如何批量注释构造函数参数?

python - 如何在单独的numpy数组中对具有相同值的numpy数组元素进行分组

c - 使用管道在两个子进程之间持续通信

python - 字节编译后删除python源文件?

Linux cpu 到 cpu 进程间通信

python - Heroku 上的进程间通信

java - 具有非 SpringBoot 托管构造函数参数的 Autowiring 类

java - 无法使用 IntelliJ 从 github 拉取项目

java - 新场景启动后代码如何执行

python - 共享/备份时使用 .py 或 .pyc 文件?