paramiko python モジュール (1.7.7.1) を使用して、リモート サーバーのグループに対してコマンドや xfer ファイルを並行して実行しようとしています。1 つのタスクは次のようになります。
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 の問題のように見えますか、それとも multiprocessing モジュールを誤解/誤用していますか? 実用的な回避策を提案してくれる人はいますか? どうもありがとう、