私は現在PycURLモジュールの助けを借りてマルチスレッドダウンローダーに取り組んでいます。ファイルの一部をダウンロードして、後でマージします。
パーツは複数のスレッドから個別にダウンロードされ、バイナリモードで一時ファイルに書き込まれますが、それらを単一のファイルにマージすると(正しい順序でマージされます)、チェックサムが一致しません。
これはLinux環境でのみ発生します。同じスクリプトがWindows envで問題なく動作します。
これは、ファイルをマージするコード(スクリプトの一部)です。
with open(filename,'wb') as outfile:
    print('Merging temp files ...')
    for tmpfile in self.tempfile_arr:
        with open(tmpfile, 'rb') as infile:
            shutil.copyfileobj(infile, outfile)
    print('Done!')私write()もメソッドを試しました   が、同じ問題が発生し、大きなファイルには大量のメモリが必要になります。
catLinuxでパーツファイルを手動で1つのファイルにしてから、ファイルのチェックサムが一致する場合、問題はpythonによるファイルのマージにあります。
編集:
問題を再現するために使用したファイルとチェックサム(sha256)は次のとおりです。
- 元のファイル
- ハッシュ:158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
 
- スクリプトによってマージされたファイル
- ハッシュ:c3e5a0404da480f36d37b65053732abe6d19034f60c3004a908b88d459db7d87
 
- 
- ハッシュ:158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
- 使用したコマンド: - for i in /tmp/pycurl_*_{0..7}; do cat $i >> manually_merged.tar.gz; done
 
                  いくつかのサンプル一時ファイルを含む、最小限の再現可能なサンプルを提供する必要があります。それぞれ数バイトの一時ファイルで問題を再現できるはずです。うまくいけば、バッファサイズは問題の一部ではありません。また、バイナリモードはおそらく重要ではないため、プレーンテキストファイルを使用できます。
                
                
                  
                    —
                    wjandrea 
                    
                  
                
              
                  FWIW Linuxで2つの非常に短いテキストファイルを使用して問題を再現できませんでした。
                
                
                  
                    —
                    wjandrea 
                    
                  
                
              
                  実際、pycurlはデータを書き込むためにバイナリモードを必要とします。
                
                
                  
                    —
                    Saumyakanta Sahoo 
                    
                  
                
              
                  OK、ファイルのヘルプが、あなたのコードが不完全まだだ:   
                
                  
                    —
                    wjandrea 
                    
                  
                
              filename、self.tempfile_arr、およびshutil不定です
                
openモードは正しくないと思います(wb)。基づいてstackoverflow.com/a/4388244/3727050あなたが必要とするab(またはr+bとseek)