Совместно использовать переменные между python и amp; Переполнение стека

У меня есть скрипт в питон непрерывно получать данные от датчиков.

Мне нужно опубликовать последние данные по запросу на веб-странице, используя PHP.

Apache, php и python находятся на одной и той же установке Linux (на самом деле на малину).

Меня не интересует сохранение предыдущих данных, и я немного обеспокоен повреждением данных при записи на SD. Я бы предпочел уменьшить сложность и увеличить скорость обновления (избегать sql).

Может текстовый файл написан на Ramfs / TMPFS решать проблему? или есть метод для разделения памяти, как Memcache поделиться также глобальными переменными?

введите описание изображения здесь

Любой практический пример или метод будет действительно хорошо принят.

0

Решение

Вы можете использовать любой совместимый формат, например, json или msgpack.
Всякий раз, когда вы генерируете данные в python, добавляете их в слой кэширования, такой как memcache / redis, используя формат json (и предпочтительно сжатую версию gzip), тогда ваш PHP-скрипт может десериализовать данные json и отобразить их в приложении.

0

Другие решения

Понятно, что memcache как средство обмена данными разных приложений будет работать.
Вы не будете иметь никаких поврежденных данных наверняка, так как все операции memcache являются атомарными. memcache atomic обсуждение может быть полезным.

На Memcached FAQ:

Является ли memcached атомным? Помимо любых ошибок, с которыми вы можете столкнуться, да, все команды внутренне атомарны. Выдача нескольких наборов одновременно не оказывает вредного воздействия, кроме того, что последний придерживается.

Замечания: Запуск службы memcache может занимать значительное количество памяти.

Надеюсь, поможет!

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

Я могу получить $ test_string как «1234» успешно в PHP.

0
По вопросам рекламы [email protected]