Найти - Пользователи
Полная версия: Распределённые вычисления в Python
Начало » Python для новичков » Распределённые вычисления в Python
1 2
twinge
Доброго времени суток всем!
Есть сегмент кластера в локальной сети = 30 серверным машинам (2x Xeon e5 2697v2 каждая), которые периодически простаивают (основную часто времени работает другая часть кластера).
Вопрос: возможно ли на этих машинах запустить “сервера” python, чтобы “клиент” пользовался их вычислительными ресурсами.

К примеру: в сети есть ноутбук на котором есть некий python код, которому не хватает ресурсов этого самого ноутбука и хочется для вычислений этого кода воспользоваться ресурсами этих самых 30 серверов.

Посоветуйте, пожалуйста куда “копать”.

Спасибо.

P.S.: к серверам есть физический доступ, поставить абсолютно любой софт на эти машины - без проблем!
doza_and
Копать в rpyc, pyro5, grpc
ну или любой другой протокол распределенных вычислений. pyro в пятой версии помоему испортился. grpc не пробовал.
twinge
Спасибо!
1)rpyc - более не мэнтэйнится, а по какой причине Вы не знаете? Или автор “всё переписал, всё стабильно, добавить нечего”?

2) в чём испортился pyro5?

Пока смотрю возможности rpyc, вроде всё понятно.
doza_and
А почему вы решили что не мейнтейнится?
https://github.com/tomerfiliba-org/rpyc
Последний коммит 25 дней назад. Вполне жив.

no support for unsafe serializers AT ALL (pickle, dill, cloudpickle) - only safe serializers (serpent, marshal, json, msgpack)

Мне нафиг не нужна эта безопасность. Удаление пикл сразу лишает меня возможности использовать аргументы в том формате который мне нужен. Кроме того это очень заметно просаживает производительность.

Кучу всего перелопатили - поломали обратную совместимость. Причем поменяли шило на мыло совершенно ничего существенного не сделано. Где гарантии что дальше не будут опять все ломать?

Я ожидаю от новых версий таких инструментов использования родной асинхронности встроенной в язык. Если учесть что в pyro4 асинхронность была почти в том виде в котором она сейчас в asyncio, то логично было пересмотреть архитектуру с переключением на event_loop от asyncio. Вместо этого люди занимались тем что тасовали модули туда сюда.

p.s.
Это лично мое мнение. Я не спец по таким системам, максимум что я писал сам так это приблуду заменяющую MPI, который нам не подошел для одного из проектов. Может у них и были какие-то мотивы непонятные мне.
twinge
Меня, по большей части, интересуют асинхронные вычисления, но выполнение удалённое через teleport останавливает не только тот поток в котором вызывается, но и код основной программы!

Вот такая штука ждёт 20 секунд и только потом выполняется… Может я чего не так делаю?

 import threading
import rpyc
import time
conn = rpyc.classic.connect("localhost")
def square(x):
	return x**2
def squaredel(x):
	import time
	time.sleep(20)
	print(x**2)
	print("!!!")
	return x**2
def remoteexec(x):
	fn2 = conn.teleport(squaredel)
	return (fn2(x))
x = threading.Thread(target=remoteexec, args=(333,), daemon=True)
x.start()
fn = conn.teleport(square)
print(fn(4))
print(fn(2))
print(fn(1))
x.join()
Rodegast
> Вопрос: возможно ли на этих машинах запустить “сервера” python, чтобы “клиент” пользовался их вычислительными ресурсами.

Можно, но задачи клиентов должны хорошо распараллеливаться.

> Посоветуйте, пожалуйста куда “копать”.

Для начала прочитай про MapReduce

doza_and
twinge
Может я чего не так делаю?
https://rpyc.readthedocs.io/en/latest/docs/async.html#async
twinge
Т.е. код, который надо выполнить асинхронно должен быть оформлен в виде Netref?
Иначе никак?

А почему мой вариант не работает?
doza_and
twinge
А почему мой вариант не работает?
Не знаю. Но скорее всего сокет один и он блочится на ожидании ответа.
twinge
Сокет не один, я пробовал запустить параллельно ещё одну сессию с этим же кодом и сервер инициализировал второй сокет…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB