1

paramiko を使用して sftp 接続を開き、リモート ファイルにアクセスしています。以下の組み込み関数内のすべてのコードは、paramiko のロギングを有効にしていない場合にのみ機能するようです。

      paramiko.util.log_to_file( 'paramiko.log' )

したがって、ファイルに上記のコード行がない場合、以下のコードが機能します。

        client = paramiko.SSHClient()
        client.load_system_host_keys()
        client.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
        client.connect( hostname,user, password)
        sftp = client.open_sftp()
        file = sftp.open( fpath, mode='r', bufsize=1 )

そうしないと、python がこの行client.connect( hostname,user, password) でハングし、狂ったように stderr ログに書き込み、最終的にコードが実行されている VM を強制終了します。

具体的には、paramiko が次の行でハングします。

t.start_client()

client.connect メソッド内。paramiko ログには有用なものは何も表示されず、stderr は説明やトレースバックのないエラーでいっぱいです。

この問題を調査すると、「利用可能な単一のインポートロックがあるため、子スレッドが別のインポートを試行すると、無期限にブロックされる可能性があります」に出くわしました。sftp接続を開くコードがブロックされないようにするにはどうすればよいですか?

4

1 に答える 1

0

これは少し長いショットですがlogging、スレッドの使用でデッドロックが発生するという問題が発生しました。正確な問題を突き止めることができませんでした(ただし、;を使用すると悪化した可能性がありますが、モジュールのスレッドサポートsubprocessを無効にすることで問題を解決しました。logging

ロギングをアクティブにする前に、これを試してください。

import logging
logging.thread = None

これで問題が解決するかどうか知りたいです。

于 2012-10-29T13:48:59.163 に答える