如果您想要非常简单的解决方案,那是不存在的。
然而,有一个具有 multiprocessing
接口的解决方案 -- pathos
-- 它能够通过并行映射建立到远程服务器的连接,并进行多进程处理。
如果您想要使用 ssh-tunneled 连接,您可以这样做... 或者如果您愿意采用不太安全的方法,您也可以这样做。
>>>
>>> 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
>>>
>>>
>>> def sleepy_squared(x):
... from time import sleep
... sleep(1.0)
... return x**2
...
>>>
>>> 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',))
>>> res = p.amap(sleepy_squared, x)
>>> res.get()
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
远程服务器的工作有点棘手,您必须要先在指定端口上启动在remote.computer.com
上运行的服务器 -- 同时必须确保本地主机和远程主机的设置都允许直接连接或ssh隧道连接。此外,您需要在每个主机上运行相同版本的pathos
和pp
的pathos
分支。同时,对于ssh,您需要运行ssh-agent以允许使用ssh进行无密码登录。
但是,希望一切顺利...如果您的函数代码可以通过dill.source.importable
传输到远程主机。
顺便说一下,pathos
早就应该发布一个新版本了,基本上需要解决一些错误和接口更改才能发布新的稳定版本。
pathos
的更近期的解决方案——名为dask
的软件包。 - Mike McKerns