ちょっとしたコンテキスト: クライアントが 7-zip アーカイブをリモートの sftp サーバーに置いており、私はそれらを処理しています。
私の問題は、一部の 7-zip ファイルでプログラムがハングし、解凍機能が終了しないことですが、アーカイブのすべてのファイルがローカル サーバーにある (存在する) ことです。
ターミナルで ctrl+c でスタック トレースを取得できました。
【端末画面】[1][1]: https://i.stack.imgur.com/O62U4.png
私のコード:
def download_from_sftp(self):
with pysftp.Connection(host=self.hostname, port=self.port, username=self.user, password=self.password, cnopts=self.cnopts) as sftp:
self.logger.debug("Connection succesfully established ... ")
sftp.cwd(self.path) # Switch to a remote directory
directory_structure = sftp.listdir_attr()
self.logger.debug("Downloading zip files :")
for attr in directory_structure:
self.logger.debug(attr.filename + " " + str(attr))
sftp.get(attr.filename, self.path_retour + attr.filename)
with py7zr.SevenZipFile(self.path_retour + attr.filename, mode='r') as z:
z.extractall(self.path_retour)
os.rename(self.path_retour + attr.filename, self.path_archive_python + attr.filename) # move zip to archive folder on local server
sftp.remove(attr.filename) # delete zip on remote server
この問題は、1000 個の 7zip アーカイブに対しておそらく 1 回発生します (ほとんどのアーカイブは 1 MB 未満です)。アーカイブの整合性を検証しようとしましたが、それらは有効です。私のデスクトップでは、py7zr はアーカイブのすべてのファイルをクラッシュ/ハングすることなく抽出できます。
おそらくsftp接続がハングの原因であると考えています。
ありがとう
- - 編集 - -
MartinPrikryl のフィードバックにより、ローカル コンピューターでスクリプト全体を実行しましたが、ハングしませんでした。サーバーがスクリプトを実行している特定のアーカイブでのみハングします。アーカイブが他のアーカイブよりもかなり大きいことに気付きました (~ 9mb)。ただし、サーバーには多くのディスク容量 (1 TB の空き容量)、4 GB RAM、4 CPU があるため、問題になることはありません。