मेरे पास एक Django व्यू है जो अपलोड की गई फ़ाइलों को संभालता है, और जब इसे बार-बार कहा जाता है, तो हम हमेशा स्मृति त्रुटियों से सामना करते हैं। (हम हरोकू पर हैं, इसलिए हमें प्रति वेब डायनो की 512 एमबी मेमोरी मिलती है)।Django: अपलोड की गई फ़ाइलों को कचरा नहीं मिला, जिससे स्मृति समस्याएं
ओवर मेमोरी त्रुटियों से पता चलता है कि प्रत्येक कॉल फ़ाइल के आकार से स्मृति उपयोग को बढ़ाती है, और स्मृति उपयोग कभी वापस नहीं जाता है। मुझे लगता है कि सर्वर इसे Django मॉडल में सहेजने के लिए स्मृति में छवि को पढ़ता है, लेकिन जब यह हो जाता है तो स्मृति को कभी भी रिलीज़ नहीं करता है।
मुझे लगता है कि फ़ंक्शन रिटर्न के बाद जारी होने वाली छवि का संदर्भ होना चाहिए, जिससे छवि को कचरा होने से रोकना चाहिए। लेकिन मैं नहीं सोच सकता कि यह क्या हो सकता है।
def simplified_add_image(request, biz_id):
if request.is_ajax():
# the file is stored raw in the request
newBI = NewBusinessImage(business_id=biz_id, name=request.GET.get("name"), primary_image=True)
newBI.id = uuid.uuid4()
newBI.save()
uniquename = biz_id + ".." + get_a_uuid() + ".jpg"
newBI.original_image.save(uniquename, ContentFile(request.read()))
# this starts a series of tasks to process the image into various sizes.
# don't think it's the problem because it runs on a separate server, and the
# web server is the one that goes over memory
tasks.image_meta_task.delay(uniquename, newBI.id)
return StockJSONResponse(request, {
"success" : True,
})
मैं वास्तव में किसी भी मदद की सराहना करेंगे:
यहाँ कोड का एक सरलीकृत संस्करण है, जो मुझे यकीन है कि यह एक ही समस्या है बनाने के लिए परीक्षण किया है। आपका बहुत बहुत धन्यवाद!
हम AmazonS3 पर हमारे फ़ाइलें संग्रहीत कर रहे हैं:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATIC_URL = 'https://s3.amazonaws.com/%s/' % AWS_STORAGE_BUCKET_NAME
from S3 import CallingFormat
AWS_CALLING_FORMAT = CallingFormat.SUBDOMAIN
और यहाँ है NewBusinessImage मॉडल
क्ले
निम्न अतिरिक्त जानकारी है कि टिप्पणी में अनुरोध किया गया था है
class NewBusinessImage(models.Model): id = UUIDField(auto=True,primary_key=True,version=4, default=uuid.uuid4()) business = models.ForeignKey('Business') name = models.CharField(max_length=100) original_image = models.ImageField(upload_to='photos/originals/') thumbnail = models.ImageField(upload_to='photos/thumbnails/') display_image = models.ImageField(upload_to='photos/displays/') enlarged_image = models.ImageField(upload_to='photos/enlarged/') num_views = models.PositiveIntegerField(editable=False, default=0) primary_image = models.BooleanField(default=False)
क्या इस 'image_meta_task.delay' है? –
यह एक अतुल्यकालिक अजवाइन कार्य है , जो मानक आकार में छवि को संसाधित करने के लिए एक अलग सर्वर (मेरा वेब सर्वर नहीं) पर लॉन्च होता है एस और उन्हें बचाओ। –
यदि यह एक सरलीकृत संस्करण है, तो इसका अर्थ यह है कि यदि आप 'image_meta_task.delay' ड्रॉप करते हैं तो आपके पास स्मृति समस्याएं नहीं हैं? साथ ही, आप फाइलें कहां स्टोर करते हैं? क्या आप सेटिंग्स.py स्टोर सेटिंग्स और 'NewBusinessImage' पोस्ट कर सकते हैं? – danihp