سؤال

أحاول إنشاء 4 صور مصغرة لكل صورة من حوالي 40 ألف صورة صورة مصغرة sorl لتطبيق جانغو الخاص بي.أقوم بالتكرار عبر جميع كائنات django باستخدام ImageWithThumbnailsFieldFile، ثم أقوم باستدعاء وظيفة generator_thumbnails() الخاصة بها.

يعمل هذا بشكل جيد، باستثناء أنه بعد بضع مئات من التكرارات، نفدت الذاكرة وتعطلت حلقتي بسبب "خطأ في الذاكرة".نظرًا لأن sorl-thumbnail يستخدم PIL لإنشاء الإبهام، فيبدو أن PIL لا يُرجع كل الذاكرة التي استخدمها عند إنشاء الإبهام.

هل يمكن لأي شخص تجنب هذه المشكلة، على سبيل المثال؟عن طريق إجبار PIL على إعادة الذاكرة التي لم تعد بحاجة إليها؟

يبدو الكود الخاص بي ببساطة كما يلي:

all = Picture.objects.all()
for i in all:
    i.image.generate_thumbnails()

تبدأ وظيفة إنشاء الصورة المصغرة هنا, ، السطر 129.

شكرا مقدما على أي نصيحة!

مارتن

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

المحلول

تتعلق مشكلتك بكيفية قيام Django بتخزين نتائج مجموعة الاستعلامات مؤقتًا أثناء تكرارها.يحتفظ Django بجميع الكائنات في الذاكرة، بحيث لا يتعين عليك في المرة القادمة التي تقوم فيها بالتكرار عبر نفس مجموعة الاستعلامات، الوصول إلى قاعدة البيانات مرة أخرى للحصول على جميع البيانات.

ما عليك القيام به هو استخدام مكرر () طريقة.لذا:

all = Picture.objects.all().iterator()
for i in all:
    i.image.generate_thumbnails()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top