paramiko的多进程模块

mur*_*phy 5 python ssh paramiko

我正在尝试使用paramiko python模块(1.7.7.1)并行执行命令和/或xfer文件到一组远程服务器.一项任务如下:

jobs = []   
for obj in appObjs:
    if obj.stop_app:
        p = multiprocessing.Process(target=exec_cmd, args=(obj, obj.stop_cmd))
        jobs.append(p)
        print "Starting job %s" % (p)
        p.start()
Run Code Online (Sandbox Code Playgroud)

除其他外,"obj"包含paramiko SSHClient,transport和SFTPClient.appObjs列表包含大约25个这些对象,因此25个连接到25个不同的服务器.

我在回溯中使用paramiko的transport.py得到以下错误

raise AssertionError("PID check failed. RNG must be re-initialized after fork(). 
Hint:   Try Random.atfork()")
Run Code Online (Sandbox Code Playgroud)

我根据https://github.com/newsapps/beeswithmachineguns/issues/17上的帖子修补了/usr/lib/python2.6/site-packages/paramiko/transport.py,但它似乎没有帮助.我已经验证了上面提到的路径中的transport.py是正在使用的路径.paramiko邮件列表似乎已经消失.

这看起来像paramiko中的问题还是我误解/误用了多处理模块?有人愿意建议一个实际的解决方法吗?非常感谢,

acu*_*ich 5

更新:正如@ento所说,分叉的ssh包已经合并回paramiko,所以下面的答案现在无关紧要,你现在应该再次使用Paramiko.

这是Paramiko中的一个已知问题,已经修复了Paramiko的一个分支(停滞在版本1.7.7.1),现在它被称为pypi上ssh包(在撰写本文时它带来了1.7.11 版本) .

显然,在主线Paramiko中获得一些重要的补丁存在问题而且维护者没有响应,所以Fabric的维护者@bitprophet 在pypi的新包名ssh包下分叉了Paramiko.你可以看到你提到的具体问题在这里讨论,并且是他决定分叉的原因之一; 如果你真的想要,你可以阅读血淋淋的细节.

  • +1主要是因为我不知道Paramiko被@ bitprophet的ssh包取代了 (2认同)