আমি বর্তমানে পাইসিআরএল মডিউলটির সাহায্যে একাধিক-থ্রেডযুক্ত ডাউনলোডারে কাজ করছি। আমি ফাইলগুলির কিছু অংশ ডাউনলোড করছি এবং সেগুলি পরে মার্জ করছি।
অংশগুলি একাধিক থ্রেড থেকে পৃথকভাবে ডাউনলোড করা হয়, সেগুলি বাইনারি মোডে অস্থায়ী ফাইলগুলিতে লেখা হয়, তবে আমি যখন তাদের একক ফাইলে মার্জ করি (সেগুলি সঠিক ক্রমে মিশে যায়), চেকসামগুলি মেলে না।
এটি কেবল লিনাক্স এনভির মধ্যে ঘটে। একই স্ক্রিপ্টটি উইন্ডোজ এনভিও-তে নির্দোষভাবে কাজ করে।
এটি কোড (স্ক্রিপ্টের অংশ) যা ফাইলগুলিকে মার্জ করে:
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()
পদ্ধতিটিও চেষ্টা করেছি, তবে এটি একই সমস্যা নিয়ে আসে এবং এটি বড় ফাইলগুলির জন্য প্রচুর মেমরির প্রয়োজন।
যদি আমি ম্যানুয়ালি cat
অংশটি লিনাক্সে একটি একক ফাইলে ফাইল করি, তবে ফাইলটির চেকসাম মেলে, সমস্যাটি পাইথনের ফাইলগুলি মার্জ করার সাথে রয়েছে।
সম্পাদনা করুন:
ফাইলগুলি এবং চেকসামগুলি (sha256) এখানে আমি সমস্যার পুনরুত্পাদন করার জন্য ব্যবহার করেছি:
- আসল ফাইল
- HASH: 158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
- স্ক্রিপ্ট দ্বারা ফাইল একত্রীকরণ
- HASH: c3e5a0404da480f36d37b65053732abe6d19034f60c3004a908b88d459db7d87
ফাইলটি বিড়াল ব্যবহার করে ম্যানুয়ালি মেশানো হয়েছে
- HASH: 158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
কমান্ড ব্যবহৃত:
for i in /tmp/pycurl_*_{0..7}; do cat $i >> manually_merged.tar.gz; done
পার্ট ফাইলগুলি - 0 থেকে 7 এর শেষে শেষে নম্বরযুক্ত
filename
, self.tempfile_arr
এবং shutil
অনির্দিষ্ট হয়
open
মোডটি ঠিক নেই (wb
)। স্ট্যাকওভারফ্লো . com/a/4388244/3727050 এর উপর ভিত্তি করে আপনার প্রয়োজনab
(বাr+b
এবংseek
)