我正在尝试使用 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()
"obj" 包含 paramiko SSHClient、传输和 SFTPClient 等内容。appObjs 列表包含大约 25 个这样的对象,因此有 25 个连接到 25 个不同的服务器。
我在回溯中使用 paramiko 的 transport.py 收到以下错误
raise AssertionError("PID check failed. RNG must be re-initialized after fork().
Hint: Try Random.atfork()")
我根据https://github.com/newsapps/beeswithmachineguns/issues/17上的帖子修补了 /usr/lib/python2.6/site-packages/paramiko/transport.py ,但似乎没有帮助。我已经验证了上面提到的路径中的 transport.py 是正在使用的。paramiko 邮件列表似乎消失了。
这看起来像是 paramiko 的问题还是我误解/误用了多处理模块?有人愿意建议一个实用的解决方法吗?非常感谢,