[英]Share variables between python & php
您可以使用任何可互操作的格式,例如 json 或 msgpack。 每当您在 python 中生成数据时,使用 json 格式(最好是 gzip 压缩版本)将其添加到 memcache/redis 等缓存层,然后您的 PHP 脚本可以反序列化 json 数据并将其显示在应用程序中。
显然,memcache 作为一种共享数据的方式可以在不同的应用程序中工作。 您肯定不会有任何损坏的数据,因为所有内存缓存操作都是原子的。 memcache 原子讨论可能很有用。
关于 memcached 的常见问题:
memcached 是原子的吗? 除了您可能会遇到的任何错误之外,所有命令都是内部原子的。 同时发行多套没有任何不良影响,除了最后一套是坚持的那一套。
注意:运行内存缓存服务可能会消耗大量内存。
希望有帮助!
我想你可以试试 System V 共享内存。
例如:
在 Python 端: python -m pip install 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”。
这是一个使用 memcached 的解决方案,适用于 Raspbian 10 (buster)、PHP 7.3.19 和 Python 3.7.3:
1.安装memcached
apt-get install memcached php-memcached
pip install pymemcache
这些命令为 PHP 和 Python 安装 memchached 服务器和客户端模块。
2.PHP代码
$m = new Memcached();
// connect
$m->addServer('127.0.0.1', 11211);
// get a value
$value = $m->get('key');
// set a value
$m->set('key', 'value');
// clean up
$m->quit();
3.Python代码
from pymemcache.client import base
# connect
m = base.Client(('127.0.0.1', 11211))
# get a value
value = m.get('key')
# set a value
m.set('key', 'value')
# clean up
m.close()
注意:
我在这里使用了默认的 memcached 设置。 如果您需要更改它们,请编辑sudo nano /etc/memcached.conf
并重新启动守护进程: sudo /etc/init.d/memcached restart
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.