Şu anda PycURL modülü yardımıyla çok iş parçacıklı bir downloader üzerinde çalışıyorum. Dosyaların bir kısmını indiriyorum ve daha sonra birleştiriyorum.
Parçalar birden çok iş parçacığından ayrı olarak indirilir, ikili modda geçici dosyalara yazılır, ancak bunları tek bir dosyada birleştirdiğimde (doğru sırada birleştirilirler), sağlama toplamları eşleşmez.
Bu sadece linux env'de olur. Aynı komut dosyası Windows env'de kusursuz çalışır.
Dosyaları birleştiren kod (betiğin bir parçası):
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()
Yöntemi de denedim , ancak aynı sorunla sonuçlanıyor ve büyük dosyalar için çok fazla bellek alacak.
cat
Parça dosyalarını Linux'ta tek bir dosyaya manuel olarak koyarsam, dosyanın sağlama toplamı eşleşirse , sorun python'un dosyaları birleştirmesiyle ilgilidir.
EDIT:
İşte sorunu yeniden oluşturmak için kullanılan dosyaları ve sağlama toplamları (sha256):
- Orijinal dosya
- HASH: 158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
- komut dosyasıyla birleştirilen dosya
- HASH: c3e5a0404da480f36d37b65053732abe6d19034f60c3004a908b88d459db7d87
dosya cat kullanılarak elle birleştirildi
- HASH: 158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
Kullanılan komut:
for i in /tmp/pycurl_*_{0..7}; do cat $i >> manually_merged.tar.gz; done
Parça dosyaları - sonunda numaralandırılmış, 0 ile 7 arasında
filename
, self.tempfile_arr
, ve shutil
tanımsız olduğunu
open
modun doğru değil (wb
). Dayanarak stackoverflow.com/a/4388244/3727050 sen gerekab
(veyar+b
veseek
)