问题描述
问题
两个python脚本需要相互通信。
…但是有一点问题。一种是服务(用python编写),该服务在用户计算机启动时(核心)被调用,第二种在用户需要时(前端)也用python和前端技术编写。 因此,我们至少有两个不同的python解释器实例。
我尝试过的
使用套接字→防火墙问题,安全性不是很好。
使用管道(os.pipe()
)→在不同的python解释器之间不共享。 (相同版本),更好的安全性(比系统中的每个进程都更容易控制加载项)
还有没有其他方法可以尝试使用标准库函数或类,库或其他东西吗?
如果前端再次调用核心,则将花费15秒的时间(请不要谈论这个问题)。我不会让我的用户等待15秒来启动核心。这将导致删除应用程序和一些非实词。 :)
也许有用
通信必须能够传输超过数千个字节。 如果它也与python2兼容,那就太好了。
在玛蒂娜的答案后更新
解决方案
感谢martineau和his 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
这样做的时候。)
希望这很清楚,并且为您提供了足够的细节。