استخدام الذاكرة العالية مع بيرثون Tarfile Lib

StackOverflow https://stackoverflow.com//questions/21039974

  •  21-12-2019
  •  | 
  •  

سؤال

أنا أعمل في بيئة تقييد الذاكرة ويستخدم نص بيثون مع مكتبة tarfile (http://docs.python.org/2/library/tarfile.html ) لإجراء نسخ احتياطية باستمرار من ملفات السجل.

كما نمت عدد ملفات السجل (~ 74 000) لاحظت أن النظام يقتل بشكل فعال عملية النسخ الاحتياطية هذه فعالة عند تشغيلها الآن.لقد لاحظت أنه يستهلك الكثير من الذاكرة فظيعة (~ 192 ميغابايت قبل أن يقتل بواسطة OS).

يمكنني جعل أرشيف جزي للرقار ($ tar -czf) من ملفات السجل دون مشكلة أو استخدام ذاكرة عالية.

رمز:

giveacodicetagpre.

يتكون Dir "ASDF" من 74407 ملفات مع أسماء الملفات الطول 73. هل لا ينصح باستخدام Tarfile في Python عندما يكون لديك كمية هائلة من الملفات؟

أنا أقوم بتشغيل Ubuntu 12.04.3 LTS و Python 2.7.3 (يبدو أن إصدار Tarfile "المراجعة $: 85213 $").

هل كانت مفيدة؟

المحلول

فعلت بعض الحفر في التعليمات البرمجية المصدر ويبدو أن Tarfile يقوم بتخزين جميع الملفات في قائمة كائنات Tarinfo ( http://docs.python.org/2/library/tarfile.html#tarfile.tarfile.getMembers )، مما تسبب في زيادة بصمة الذاكرة المتزايدة مع الكثيرين و أسماء الملفات الطويلة.

يبدو أن التخزين المؤقت من كائنات Tarinfo هذه قد تم تحسينها بشكل كبير في الالتزام من عام 2008، http:// bugs. python.org/issue2058 ، ولكن من ما أستطيع أن أرى أنه تم دمجه فقط مع فرع PY3K، لبيتثون 3.

يمكن لأحد إعادة تعيين قائمة الأعضاء مرارا وتكرارا، كما هو الحال في http://blogs.it.ox.ac.uk/inapickle 21/06/20/20/high-memory-usage-when-using-pythons-tarfile -Module / ، ومع ذلك أنا لست متأكدا من وظيفة tarfile الداخلية التي يفتقد المرء ثم ذهبت مع استخدام مكالمة مستوى النظام بدلا من ذلك (> نظام OS.System ('Tar -CZF ASDF.TAR ASDF /'). < / ص>

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top