Каков наилучший способ получения непрерывных данных из другой программы в Django?

#python #django #shared-memory #web-frameworks

#python #django #разделяемая память #веб-фреймворки

Вопрос:

Вот настройка: на одноплатном компьютере с очень элементарным Linux я использую Django app . Это приложение при нажатии кнопки или в ответ на данные, описанные ниже, должно вызывать либо функцию из библиотеки, написанной в C , либо скомпилированную C программу, для записи данных в системную память по указанному адресу, например, тыкать / заглядывать. ( Python похоже, это невозможно сделать изначально).
Django Приложение также должно непрерывно отображать данные, которые считываются из памяти из той же библиотеки / программы.

Теперь мой вопрос заключается в том, как начать с настройки сценария, описанного выше. Возможно ли это вообще с помощью веб-приложения? Является Django ли или, что более важно, любой веб-фреймворк даже правильным подходом здесь? Я здесь в некоторой растерянности, так как я потратил довольно много часов, пытаясь понять, как это сделать, не получив самой базовой отправной точки…


Отказ от ответственности: Я довольно новичок во всей веб-среде и, что более важно, в веб-разработке в целом, поэтому извините, если это плохой вопрос, я мог бы легко найти информацию по этой теме в Интернете, но я не мог найти хорошую отправную точку в этом.

Ответ №1:

Я хотел добавить комментарий, но не хватило места… в любом случае

Вы можете написать собственное расширение на C для Python, которое могло бы делать то, что вам нужно, проверьте это.

Теперь о том, что данные отображаются непрерывно, это довольно расплывчато, если эта библиотека C переключает этот гипотетический адрес, очень часто и очень быстро, вам нужно обновлять клиент браузера как можно быстрее.

Я думаю, что websockets справились бы с этой задачей, но они связаны с js, поэтому я думаю, что NodeJS был бы лучшим кандидатом для серверной части вашего приложения вместо Django.

Если вы хотите придерживаться Django, вы также можете предоставить URL-адрес с сгенерированным значением адреса и иметь веб-страницу, непрерывно (с небольшим интервалом) проверяющую этот URL-адрес с помощью простого вызова ajax, довольно уродливого и неэффективного, но работающего.

В любом случае, ИМХО, вам лучше всего использовать websockets, потому что с ними у вас есть полная двойная связь между клиентом и сервером.

Удачи с вашим проектом.

Информация:

Websockets в Django с socket.io

Nodejs socket.io

Комментарии:

1. Адрес переключается не часто, значение может быстро меняться, и на некоторые изменения значения адреса необходимо отвечать, записывая адрес ответа как можно быстрее. Таким образом, я подумал, что лучше всего запустить поток C, который непрерывно считывает адреса и отвечает на них, если это необходимо. Теперь эта программа на C должна каким-то образом передавать данные при их изменении в приложение Django..

2. Чтобы уведомить Django об изменении, вы можете попробовать Signals . Я бы интегрировал ваш вызов внутри Python изначально, или вы все равно можете использовать os.system для вызова программы.