से डेटा के कई टुकड़े पास करें मेरे पास एक पाइथन स्क्रिप्ट और एक सी प्रोग्राम है (मैंने दोनों को लिखा है, इसलिए मेरे पास स्रोत है)। मुझे पाइथन स्क्रिप्ट से बड़ी मात्रा में डेटा पास करने की आवश्यकता है जो सी प्रोग्राम के कई बार कॉल करता है। अभी मैं उपयोगकर्ता को एएससीआई फाइल या बाइनरी फ़ाइल से गुजरने के बीच चुनने देता हूं, लेकिन दोनों काफी धीमे और बेकार हैं (मेरा मतलब है, यदि आप डेटा स्टोर करना चाहते हैं तो फाइल उपयोगी होती है, लेकिन मैं इन फ़ाइलों को अंत में हटा देता हूं लिपी)। ओएससिस्टम काम नहीं करता है, तर्क बहुत अधिक हैं। (सी प्रोग्राम भी पाइथन पर डेटा लौटने के लिए फाइलों का उपयोग करता है, लेकिन यह बहुत कम डेटा है)पायथन से सी प्रोग्राम
मुझे आश्चर्य है कि मैं इस एक्सचेंज को तेजी से बनाने के लिए क्या उपयोग कर सकता हूं। फ़ाइलों को रैम डिस्क पर लिखना? यदि हां, तो मैं यह कैसे कर सकता हूं?
मैंने सुना है कि ctypes का उपयोग कर डीएल से कार्यों को कॉल करना संभव है, लेकिन मुझे नहीं पता कि मेरे प्रोग्राम को एक डीएल के रूप में कैसे संकलित करें (मैं 7 64 जीत पर wxdevC++ का उपयोग करता हूं)। या इसे लपेटें, लेकिन अभी भी यह नहीं पता कि यह काम कर सकता है और यदि यह कुशल है ..
क्या कोई मुझे बता सकता है कि मैं यह कैसे कर सकता हूं? हो सकता है कि अधिक infos मदद मिल सकती है:
संपादित करें (डेटा एक 3 डी जाली के कोने हैं)। मैं एक अन्य प्रोग्राम (blender (ओपन सोर्स)) के अंदर पाइथन लिपि चला रहा हूं, और इसे कई बार (आमतौर पर 500 गुना से अधिक) कहा जाता है क्योंकि यह एक चक्र के अंदर है। स्क्रिप्ट प्रोग्राम में शोर सूचनाएं (1 इंट इंडेक्स और 3 फ्लोट कॉर्ड) भेजती है, और प्रोग्राम को कई कोष्ठक (केवल इंट इंडेक्स) लौटा देना चाहिए, क्योंकि मुझे पायथन के साथ संबंधित कोष्ठक मिल सकते हैं)। तो यह इंटरैक्टिव नहीं है, यह एक समारोह की तरह है (लेकिन यह सी में लिखा है)। स्क्रिप्ट + सी प्रोग्राम (जो ब्लेंडर के एड-ऑन हैं) जो मैं लिख रहा हूं, क्रॉस-प्लेटफॉर्म होना चाहिए क्योंकि इसे फिर से वितरित किया जाएगा (मैं स्रोत और संकलित प्रोग्राम दूंगा)। हो सकता है कि यह नोट मदद कर सके: कार्यक्रम वास्तव में सी में लिखा गया है, और अजगर से मैं उस संरचना की स्मृति में पता जान सकता हूं जिसमें चरम डेटा शामिल है। अगर केवल मुझे पता है कि यह कैसे करना है, तो सी प्रोग्राम को केवल एक पता पास करने के लिए बेहतर होना चाहिए, और वहां से अन्य सभी कोष्ठक (सूची में संग्रहीत हैं) ढूंढें। लेकिन जहां तक मुझे पता है, मैं किसी अन्य प्रोग्राम की मेमोरी स्पेस तक नहीं पहुंच सकता, और मुझे नहीं पता कि प्रोग्राम को पाइप के साथ कॉल करना है या जो भी नया धागा शुरू करता है या स्क्रिप्ट के अंदर चलाया जाता है (जो वास्तव में नीचे चलाया जाता है ब्लेंडर धागा) पी.एस.: ब्लेंडर/स्रोत/ब्लेंडर/makesdna/DNA_meshdata_types.h
मैं सी प्रोग्राम लिखा था, मैं बदल सकते हैं मैं कैसे चाहते हैं। तो पाइप के साथ कुछ संचार करना stdin में लिखने की तरह है? –
अगर मैं आपको सही ढंग से समझता हूं, हाँ। मैं बस मामले में एक उदाहरण पोस्ट करूंगा। – senderle
ठीक है, मैं आपके कोड को कम करता हूं। दुर्भाग्य से मैं कोड को फिर से वितरित कर दूंगा, इसलिए मैं केवल मानक पुस्तकालयों का उपयोग करना पसंद करता हूं (मैंने देखा कि तत्काल एक बाहरी पुस्तकालय है)। मैं पाइप के साथ कोशिश करूंगा। और मैं आपको थोड़ा और परेशान करता हूं: क्या आपको लगता है कि एक साझा लाइब्रेरी बनाना और इसे ctypes के साथ कॉल करना भी काम करेगा? बीटीडब्ल्यू वास्तव में इनलाइन चीज दिलचस्प है! –