@sobanim
Junior Front-End Dev

Как лучше с raspberry-сервера отправить код на raspberry-клиенты, выполнить его и результат вернуть на сервер?

Досталась дипломная работа. Суть:
Есть 3 raspberry, один будет как сервер, а два остальных как клиенты. С сервера нужно отправить код на исполнение, клиентам. При чём, это может быть любая задача, которую возможно решить параллельно. Клиент не должен знать заранее код, ему пришлёт сервер. Когда клиент(ы) произведёт(ут) расчёты то вернёт результат(ы) на сервер. Само собой, если какая-то ошибка, то она должна прийти на сервер и написать, что случилось и с какого клиента.

Возможно ли данную задачу решить через Python и socket?
Или может лучше смотреть в сторону rabbitmq?
Ещё читал что, если dispy как раз для этого предназначенная. Но, пока не изучал, подойдёт ли или нет.

Что посоветуете использовать?
Как примерно должна выглядеть сторона сервера и сторона клиента, для передачи целой исполняемой функции? на словах, алгоритмически

Задачу вроде как понимаю. Начал с сокетами разбираться, но, а как тогда отправить конкретному клиенту то, что мне нужно? Ведь программа на выполнение клиентом может быть и 10-30 строчек кода.
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
rabbitmq - это всего лишь способ обмена данными, сам по себе он поставленную задачу не решит. А вот dispy, судя по описанию и примерам из документации, для подобных задач может подойти, я бы попробовал.

Если же захочется накостылить собственное решение, то сокеты в принципе не так уж и нужны (хотя и их возможно использовать для взаимодействия). Можно, например, сделать web-сервис, в котором передавать файл с кодом или даже архив с кодом и данными. На той стороне обработчик положит всё это во временный каталог, запустит, когда вычисления завершатся - результат сольёт обратно серверу. Примерно так:

Сервер вызывает:
POST computational-node1/task
..код и/или данные..

получаем в ответ некий id - идентификатор задания - например, 123.

После этого нода запускает вычислительный процесс. По его окончанию дёргает сервер:
POST main-server/result/computational-node1/123
..результаты..


Ещё один вариант - загружать задание также архивом по scp, потом вызывать по ssh запуск скрипта и ожидать его завершения.

Возможны десятки вариаций толщины и радиуса изгиба костылей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы