在python和amp;之间共享变量PHP

时间:2017-09-10 13:01:23

标签: php python linux memcached tmpfs

我在 python 中有一个脚本连续接收来自传感器的数据。

我需要使用 php 在网页上发布请求的最新数据。

Apache,php和python都在同一个Linux安装上(实际上是在树莓上)。

我对存储以前的数据不感兴趣,而且我有点担心在SD上写入时的数据损坏。我宁愿降低复杂性并提高速度刷新(避免使用sql)。

ramfs / tmpfs 编写的文本文件能否解决问题?或者有一种共享内存的方法,比如 memcache 来共享全局变量?

enter image description here

任何实际的例子或方法都会被广泛接受。

3 个答案:

答案 0 :(得分:0)

您可以使用任何可互操作的格式,如json或msgpack。 每当你在python中生成数据时,使用json格式(最好是gzip压缩版本)将它添加到memcache / redis这样的缓存层,然后你的PHP脚本可以反序列化json数据并在应用程序中显示它。

答案 1 :(得分:0)

显然,memcache作为共享数据的一种手段,不同的应用程序将起作用。 由于所有memcache操作都是原子的,因此您不会有任何损坏的数据。 memcache atomic讨论可能有用。

关于memcached的常见问题解答:

  

memcached是原子的吗?除了你可能遇到的任何错误,是的所有命令都是内部原子的。同时发行多套没有任何不良影响,除了最后一个是坚持的。

注意:运行内存缓存服务可能会占用大量内存。

希望它有所帮助!

答案 2 :(得分:0)

我认为您可以尝试使用System V共享内存。

例如:

在Python方面: python -m pip安装sysv_ipc

然后在python脚本中的某处:

import sysv_ipc
...
KEY=20171220
sysv_memory=sysv_ipc.SharedMemory(KEY, sysv_ipc.IPC_CREAT, 0666, 256)
...
sysv_memory.write('1234'+'\0')

然后在PHP端:

$SHARED_MEMORY_KEY = 20171220;
...
$shmId = shmop_open($SHARED_MEMORY_KEY, 'a', 0666, 256);
...
$test_string = shmop_read($shmId, 0, 0);

我可以在PHP中成功获取$ test_string作为'1234'。