मेरे पास एक मेमोरी गहन पायथन एप्लिकेशन है (कई जीबी से सैकड़ों एमबी के बीच)।
मेरे पास कुछ छोटे छोटे लिनक्स निष्पादन योग्य हैं जिन्हें मुख्य एप्लिकेशन को चलाने की आवश्यकता है, उदा।पायथन फोर्क और मेमोरी आवंटन त्रुटियों को समझना
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
जब मैं इन बाह्य उपयोगिताओं चलाने (एक बार, लंबे समय से मुख्य प्रक्रिया रन के अंत में) subprocess.Popen
का उपयोग कर मैं कभी कभी OSError: [Errno 12] Cannot allocate memory
मिलता है।
मुझे समझ में नहीं आता क्यों ... अनुरोधित प्रक्रिया छोटी है!
सिस्टम में कई और गोले के लिए पर्याप्त स्मृति है।
मैं लिनक्स (उबंटू 12.10, 64 बिट्स) का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि सबप्रोसेस कॉल फोर्क।
और फोर्क मेरी मौजूदा प्रक्रिया को फोर्क करता है, इस प्रकार उपभोग की गई स्मृति की मात्रा को दोगुना कर देता है, और विफल रहता है ??
"लिखने पर प्रतिलिपि" के साथ क्या हुआ?
क्या मैं फोर्क के बिना एक नई प्रक्रिया उत्पन्न कर सकता हूं (या कम से कम स्मृति की प्रतिलिपि के बिना - ताजा शुरू करना)?
संबंधित:
The difference between fork(), vfork(), exec() and clone()
fork() & memory allocation behavior
Python memory allocation error using subprocess.Popen
[क्या आपने इस प्रश्न को संबंधित प्रश्न पर पढ़ा है] (http://stackoverflow.com/a/13329386/4279)? – jfs
मेरे पास है, धन्यवाद। वहां कुछ मूल्यवान कामकाज हैं, जिनमें से कुछ मैं उपयोग कर सकता हूं। मैं एक असली समाधान की उम्मीद कर रहा था - पाइथन के भीतर से एक नई प्रक्रिया को बढ़ाने की क्षमता जो सभी प्रक्रिया मेमोरी को ला फोर्क की प्रतिलिपि नहीं बनाती है। –