0

ちょっとしたコンテキスト: クライアントが 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 があるため、問題になることはありません。

4

1 に答える 1

1

py7zr がいくつかのアーカイブでハングしていた理由を見つけることができませんでしたが、python 3.7.4 を python 3.8.5 に更新すると問題が解決しました。

于 2021-03-09T14:10:15.507 に答える