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接続を開くコードがブロックされないようにするにはどうすればよいですか?