3

Telnet および SSH ホストからいくつかのコマンドの出力を取得し、それらをシェルフに保存しようとしています。コマンドが多いのでマルチプロセッシングを使っています。次の重要な方法があります。

  1. connectToHost:方法で接続(SSH/Telnet)します。
  2. ExecuteCommand: コマンドを実行して出力を取得します。
  3. main: ここで、すべてのコマンドを反復処理し、 を使用して辞書で出力を取得していますmultiprocessing。このメソッドは、他のプロセスからの出力をマージする別のメソッドを呼び出します。

Telnet の場合、すべて正常に動作しますが、SSH 接続の場合、コードが失敗し、process.start()次のエラーが発生します。

TypeError: CompiledFFI オブジェクトをピクルできません

同じメソッドを呼び出しているのに、SSH で機能しないのはなぜですか? これを修正するには?

4

1 に答える 1

0

新しいプロセスを開始するとき、Python はそのプロセスで使用されるすべての変数を渡す必要があります。この場合、特定のホストへの接続です。そのためには、変数をシリアル化 (ピクル) する必要があります。

paramiko はオブジェクトをピクルできないFFIを使用しているようです。

マルチプロセッシングをマルチスレッドに変更するか (pickle は必要ありません)、最初からすべてのプロセスで ssh 接続を作成することで問題を解決できます (これはあまり効率的ではない可能性があります)。

于 2020-02-28T11:36:09.533 に答える