Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python和;php_Php_Python_Linux_Memcached_Tmpfs - Fatal编程技术网

在python和;php

在python和;php,php,python,linux,memcached,tmpfs,Php,Python,Linux,Memcached,Tmpfs,我在python中有一个脚本,它不断地从传感器接收数据 我需要使用php在网页上发布请求的最后数据 Apache、php和python都安装在相同的linux上(实际上是在一个树莓上) 我对存储以前的数据不感兴趣,我有点担心在SD上写入时的数据损坏。我更愿意降低复杂性并提高刷新速度(避免sql) 用ramfs/tmpfs编写的文本文件能否解决问题?或者有一种共享内存的方法,比如memcache来共享全局变量 任何实用的示例或方法都会被广泛接受。您可以使用任何可互操作的格式,如json或msgp

我在python中有一个脚本,它不断地从传感器接收数据

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

Apache、php和python都安装在相同的linux上(实际上是在一个树莓上)

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

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


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

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

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

显然,memcache是一种共享数据的方法,不同的应用程序可以工作。 您肯定不会有任何损坏的数据,因为所有memcache操作都是原子的。讨论可能是有益的

关于memcached的常见问题:

memcached是原子的吗?除了可能遇到的任何bug之外,是的,所有命令都是内部原子的。在同一时间发行多套货币没有不良影响,除了最后一套货币是固定的

注意:运行memcache服务可能会消耗大量内存


希望有帮助

很明显,memcache作为一种共享数据的手段,不同的应用程序都会起作用。 您肯定不会有任何损坏的数据,因为所有memcache操作都是原子的。讨论可能是有益的

关于memcached的常见问题:

memcached是原子的吗?除了可能遇到的任何bug之外,是的,所有命令都是内部原子的。在同一时间发行多套货币没有不良影响,除了最后一套货币是固定的

注意:运行memcache服务可能会消耗大量内存


希望有帮助

我想你可以试试SystemV共享内存

例如:

在Python端: python-mpip安装sysv\u 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_字符串设置为'1234'。

我想您可以尝试SystemV共享内存

例如:

在Python端: python-mpip安装sysv\u 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_字符串设置为“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();
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()
3。Python代码

$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();
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

以下是一个使用memcached的解决方案,它可以在Raspbian 10(buster)、PHP7.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();
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()
3。Python代码

$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();
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

您可以将phpIt作为HTTP post值发送,因为它是最初的解决方案,但实际上已被丢弃。python脚本数据不断更改,并且必须可供用户使用(php网页)只能根据要求。在我看来,php页面必须在“系统共享缓存”(这里是在ramdisk中创建文件的概念)中读取数据,您可以将其作为phpIt的HTTP post值发送,这是最初的解决方案,但实际上已被丢弃。python脚本数据不断变化,必须仅在用户请求时才可用(php网页)。在我看来,php页面必须在“系统共享缓存”中读取数据(从这里可以看出在ramdisk中读取文件的想法)