Если вы хотите очень простое решение, не существует один.
Однако есть решение, имеющее интерфейс multiprocessing
- pathos
- который имеет возможность устанавливать соединения с удаленными серверами через параллельную карту и выполнять многопроцессорную обработку.
Если вы хотите подключиться к ssh-туннелированию, вы можете это сделать ... или если вы в порядке с менее безопасным методом, вы тоже можете это сделать.
>>> # establish a ssh tunnel
>>> from pathos.core import connect
>>> tunnel = connect('remote.computer.com', port=1234)
>>> tunnel
Tunnel('-q -N -L55774:remote.computer.com:1234 remote.computer.com')
>>> tunnel._lport
55774
>>> tunnel._rport
1234
>>>
>>> # define some function to run in parallel
>>> def sleepy_squared(x):
... from time import sleep
... sleep(1.0)
... return x**2
...
>>> # build a pool of servers and execute the parallel map
>>> from pathos.pp import ParallelPythonPool as Pool
>>> p = Pool(8, servers=('localhost:55774',))
>>> p.servers
('localhost:55774',)
>>> y = p.map(sleepy_squared, x)
>>> y
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Или, вместо того, чтобы вы могли настроить для прямого подключения (без SSH)
>>> p = Pool(8, servers=('remote.computer.com:5678',))
# use an asynchronous parallel map
>>> res = p.amap(sleepy_squared, x)
>>> res.get()
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Это все немного привередливы, для удаленного сервера, чтобы работать, вы должны начать сервер, работающий на remote.computer.com
в указанном порту заранее - и вы должны убедиться, что оба параметра на вашем локальном хосте и удаленном хосте позволят либо прямое соединение, либо соединение с ssh-туннелем. Кроме того, у вас должна быть та же версия pathos
и из вилки pathos
pp
, работающей на каждом хосте. Кроме того, для ssh вам нужно запустить ssh-agent, чтобы разрешить вход без пароля с помощью ssh.
Но тогда, надеюсь, все это сработает ... если ваш код функции можно передать на удаленный хост с помощью dill.source.importable
.
FYI, pathos
давно назрел выпуск, и в основном есть несколько ошибок и изменений интерфейса, которые необходимо решить до того, как будет разрезан новый стабильный релиз.
Возможно, требуется больше настроек, чем вы ищете, но вы можете взглянуть на сельдерей для распределенной очереди задач. http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html – monkut
Я бы посмотрел [кувшин] (http://luispedro.org/software/jug) – szxk
Я могу в конечном итоге использовать сельдерей, но для этого требуется очень много настроек, и файлы справки трудно отслеживать (разделенные, а не четкие пошаговые инструкции с копией всего скрипта в конце). Документы Jug говорят о распараллеливании, но не распараллеливании на разных компьютерах. – Michael