Метод распределения вычислений - это способ объединения нескольких компьютеров для решения общей проблемы. Он превращает компьютерную сеть в мощный единый компьютер, который предоставляет широкомасштабные ресурсы для решения сложных задач. Данная задача всегда актуальна. Всегда присутствуют такие процессы, выполнить которые не представляеться возможным или выполнение которых ведеться слишком медленно. Метод распределения вычислений можно применить при обучении нейронной сети, решении задачи оптимизации маршрутов, и т.п.
Основной код описан в двух файлах в папке scr. Код серверной части описан в файле server.py, а код клиентской части описан в файле dicomp.py.
Для нормальной работы рекомендую прочитать документацию к проекту: Documentation
Лицензия открытого исходного кода представлена в файле LICENSE
Исходный код распространяется под лицензией MIT.
-
python - python.org
-
pypi - pypi.org
-
Курс "Параллельные и распределенные вычисления" - youtube.com
Материал представлен на русском языке от канала Компьютерные науки. Лекции читает О.В.Сухолов. Курс отпределен как куср-ШАД - Школа Анализа Данных от кампании Яндекс. ВНИМАНИЕ! В курсе представлены решения на Java, рекомендуется знать его.
-
Что такое распределение вычислений - ru.wikipedia.org
Реализация метода распределения вычислений обычно выполняется на быстрых и стандартных языках программирования, такие как Java или C/C++. Однако, на данный момент, изучение нового языка программирования немного нецелесообразно, в связи с этим, реализация будет на более понятном и изученном мной языке - Python. Python так же поддерживает многопоточность, что важно для реализации метода.
Метод распреедления вычислений был выбран весьма примитивный - простое преобразование исходного кода в текст, отправка текста пакетами, выполнение полученного куска кода на сервере, отправка результата обратно клиенту и вывод полученной информации. Все работает в многопоточном режиме, что позволяет создавать более сложные сземы подключения всех зависимостей.
При работе были использованы библиотеки python:
- threading -> для многопоточности сервера;
- os -> для удаления временных файлов программы;
- inspect -> для получения исходного кода декорируемой функции;
- socket -> для обьединения серверной и клиентской частей;
- subprocess -> для выполнения полученного кода и получения данных из терминала.
23.06.2023 - первый масштабный прогресс!
Теперь вычислени происходят.
Я заметил, что присутсвует какой-то странный вывод от сервера, позже я заметил ту деталь, которую мог незаметить только слепой: моя функция не вызывается!?! поэтому выводилась пустота, теперь осталось самая малость, сделать так, чтобы можно было один раз отправить полный файл, теперь это более понятно как сделать, только объеденить две функции у клиента.
05.08.2023 - исправлены многие ошибки, такие как:
- Ошибка с вычислением маленьких чисел
- Ошибка с возвращением ошибок
- Ошибка с вызовом функции несколько раз;
Код на сервере теперь работает куда быстрее за счет возможности использования Pypy;
Сервер теперь многопоточен, что позволит одновременно вычислять несколько задач;
01.11.2023 -добвлена информация:
- добавлена базовая документация по пользованию библиотекой;
- добавлена документация, описывающая части кода клиентской части;
- добавлена документация, описывающая части кода серверной части;
- Flow (Поток) - наименьшая единица обработки, исполнение которой может быть назначено ядром операционной системы.
- Process (Процесс) - это выполняющаяся программа. Один или несколько потоков выполняются в контексте процесса.
- Cluster (Кластер) - группа компьютеров, объединённых высокоскоростными каналами связи, представляющая с точки зрения пользователя единый аппаратный ресурс.
- Parallel computing (Параллельные вычисления) - способ организации компьютерных вычислений, при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно (одновременно).