python解释器的两个实例之间如何通信? 也许有用

问题描述

问题

两个python脚本需要相互通信。

…但是有一点问题。一种是服务(用python编写),该服务在用户计算机启动时(核心)被调用,第二种在用户需要时(前端)也用python和前端技术编写。 因此,我们至少有两个不同的python解释器实例。

我尝试过的

使用文件→不安全,任何过程都可以读取内容

使用套接字→防火墙问题,安全性不是很好。

使用管道(os.pipe())→在不同的python解释器之间不共享。 (相同版本),更好的安全性(比系统中的每个进程都更容易控制加载项)

还有没有其他方法可以尝试使用标准库函数或类,库或其他东西吗?

如果前端再次调用核心,则将花费15秒的时间(请不要谈论这个问题)。我不会让我的用户等待15秒来启动核心。这将导致删除应用程序和一些非实词。 :)

也许有用

通信必须能够传输超过数千个字节。 如果它也与python2兼容,那就太好了。

在玛蒂娜的答案后更新

解决方

感谢martineauhis answer,这使我可以编写有关解决方案的代码片段。代码段:

>>> from multiprocessing import shared_memory
>>> s = shared_memory.SharedMemory("NAME",create=True)
>>> s.buf[0] = 5
>>> # Now in another python shell
>>> import multiprocessing.shared_memory as sm
>>> sm.SharedMemory("NAME",create=False)
>>> s.buf[0] 
5

解决方法

您可以尝试的一件事是multiprocessing.shared_memory。它的文档说:“…一个进程可以创建一个具有特定名称的共享内存块,而另一个进程可以使用相同的名称附加到该共享内存块。

详细说明:让服务创建一个共享内存实例并为其指定唯一的名称,然后让前端在运行时查找具有该名称的实例(在通话中指定create=False这样做的时候。)

希望这很清楚,并且为您提供了足够的细节。