2012-04-22 10 views
9

एक पायथन स्क्रिप्ट में, मैं एक निश्चित फ़ंक्शन कॉल के लिए मेमोरी सीमा सेट करना चाहता हूं। मैंने how to limit heap size देखा; हालांकि, मैं पूरी चल रही पायथन प्रक्रिया की स्मृति को सीमित नहीं करना चाहता - यानी फ़ंक्शन कॉल से पहले और बाद में मेमोरी सीमा निर्धारित करना।पायथन: किसी विशेष फ़ंक्शन कॉल के लिए मेमोरी सीमा सेट करना

क्या किसी दिए गए मेमोरी के साथ फ़ंक्शन कॉल करने का कोई तरीका है, ताकि स्मृति सीमा कॉलर को प्रभावित न करे?

+9

एक नई प्रक्रिया खोलें और ढेर आकार को सीमित करें। – JBernardo

+2

या, सिद्धांत रूप में आप वर्तमान फ्रेम का निरीक्षण भी कर सकते हैं और इसमें सभी वस्तुओं के साथ एक पेड़ का पुनरावृत्ति बना सकते हैं और उपयोग की गई स्मृति का अनुमान लगा सकते हैं, लेकिन यह आसान नहीं है। जांचें कि स्मृति प्रोफाइलर्स guppy.heapy कैसे करते हैं। –

+5

लेकिन वास्तविक सवाल यह है कि आप ऐसा क्यों करना चाहते हैं? इसके लिए कोई अंतर्निहित सुविधा नहीं है, इसलिए हो सकता है कि आप गलत तरीके से समस्या का सामना कर रहे हों। –

उत्तर

2

नहीं, यह असंभव है। पाइथन इस बात का ट्रैक नहीं रखता कि कौन सी फ़ंक्शन नई मेमोरी आवंटित करने के लिए ज़िम्मेदार हैं, और न ही libc करता है, इसलिए केवल एक ही फ़ंक्शन द्वारा मेमोरी उपयोग को सीमित करने का कोई तरीका नहीं है।

ऐसा करने के लिए आपको पायथन को संशोधित करना होगा ताकि आप स्मृति आवंटित करने के लिए एक नया फ़ंक्शन उपयोग कर सकें जिसके लिए यह निर्दिष्ट किया जाना चाहिए कि पाइथन फ़ंक्शन क्या जिम्मेदार है, ताकि यह कार्य आवंटन को अस्वीकार कर दे, इसकी सीमा

ऐसा करने का एकमात्र अन्य तरीका वास्तव में सीमित स्मृति के साथ एक अलग प्रक्रिया में फ़ंक्शन निष्पादित करना होगा, जैसा कि @ जेबेर्नर्डो ने कहा था।

सैंडबॉक्स लागू करने के लिए, पहले से ही अपेक्षाकृत अच्छी तरह से परीक्षण किए गए कार्यान्वयन हैं। क्या कोई कारण है कि आप उनका उपयोग नहीं कर सकते? विशेष रूप से पीपीपी sandboxed VM और Zope sandbox देखें।

संबंधित मुद्दे