如何在 python 解释器的两个实例之间进行通信?
How to communicate between two instances of python interpreter?
问题
两个python脚本需要相互通信。
…不过有个小问题。一个是服务(用 python 编写),当用户的计算机启动时调用(核心),第二个在用户需要时调用(前端),也用 python 和前端编写技术人员。
所以我们至少有两个不同的 python 解释器实例。
我试过的
使用文件 → 不安全,任何进程都可以读取内容。
使用Socket → 防火墙问题,安全性不是很好
使用管道 (os.pipe()
) → 不在不同的 python 解释器之间共享。 (相同版本),更好的安全性(控制附加组件比控制系统上的每个进程更容易)
有没有我没有尝试过的其他方法或可能有用的建议,标准库函数或 class,库或其他东西?
如果前端再次调用核心,将近15秒(先不说这个,拜托)。我不会让我的用户等待 15 秒来启动核心。这将导致删除应用程序和一些不友善的话。 :)
可能有用
通信必须能够传输超过数千字节。
如果它也兼容 python2 就太好了。
马蒂诺回答后更新
解决方案
感谢 martineau and 让我可以编写有关解决方案的代码片段。代码片段:
>>> 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
。它的文档说“......一个进程可以创建一个具有特定名称的共享内存块,而另一个进程可以使用相同的名称附加到同一个共享内存块。
更详细一点:让服务创建一个共享内存实例并给它唯一的名称,然后让 front-end 在 运行 时查找具有该名称的实例(指定create=False
正在通话时)。
希望这对您来说足够清楚和详细。
问题
两个python脚本需要相互通信。
…不过有个小问题。一个是服务(用 python 编写),当用户的计算机启动时调用(核心),第二个在用户需要时调用(前端),也用 python 和前端编写技术人员。 所以我们至少有两个不同的 python 解释器实例。
我试过的
使用文件 → 不安全,任何进程都可以读取内容。
使用Socket → 防火墙问题,安全性不是很好
使用管道 (os.pipe()
) → 不在不同的 python 解释器之间共享。 (相同版本),更好的安全性(控制附加组件比控制系统上的每个进程更容易)
有没有我没有尝试过的其他方法或可能有用的建议,标准库函数或 class,库或其他东西?
如果前端再次调用核心,将近15秒(先不说这个,拜托)。我不会让我的用户等待 15 秒来启动核心。这将导致删除应用程序和一些不友善的话。 :)
可能有用
通信必须能够传输超过数千字节。 如果它也兼容 python2 就太好了。
马蒂诺回答后更新
解决方案
感谢 martineau and
>>> 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
。它的文档说“......一个进程可以创建一个具有特定名称的共享内存块,而另一个进程可以使用相同的名称附加到同一个共享内存块。
更详细一点:让服务创建一个共享内存实例并给它唯一的名称,然后让 front-end 在 运行 时查找具有该名称的实例(指定create=False
正在通话时)。
希望这对您来说足够清楚和详细。