如何在python解释器的两个实例之间进行通信



问题

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

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

我尝试了什么

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

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

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

有没有其他我没有尝试过的方法,或者可能有帮助的建议,一个标准的库函数或类,一个库之类的?

如果前端再次调用核心,几乎需要15秒(请不要谈论这个(。我不会让我的用户等15秒才启动核心。这将导致删除应用程序和一些不友好的词语。:)

也许有用

通信必须能够传输数千字节以上的数据。如果它也兼容python2,那就太好了。

MARTINEAU回答后的更新

解决方案

感谢martineau和他的回答,让我可以写一段关于解决方案的代码片段

>>> 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(。

希望这对你来说足够清晰和详细。

相关内容

  • 没有找到相关文章

最新更新