2016-02-26 20 views
5

के बीच जानकारी साझा करना मेरे पास 2 कोड बेस हैं, एक पायथन में, एक सी ++ में से एक है। मैं उनके बीच वास्तविक समय डेटा साझा करना चाहता हूं।एक पायथन कोड और सी ++ कोड (आईपीसी)

  • कई छोटे डेटा सी ++ प्रोग्राम से अजगर कार्यक्रम
  • के लिए अद्यतन वे एक ही मशीन पर दोनों रन
  • विश्वसनीयता महत्वपूर्ण है: मैं मूल्यांकन करने के लिए कौन-सा विकल्प मेरी विशिष्ट उपयोग के लिए सबसे अच्छा काम करेंगे कोशिश कर रहा हूँ
  • कम विलंबता

अच्छा है मैं कुछ ही विकल्प देख सकते हैं:

  • एक प्रक्रिया एक फ्लैट फ़ाइल को लिखती है, दूसरी प्रक्रिया इसे पढ़ती है। यह गैर स्केलेबल, धीमी और आई/ओ त्रुटि प्रवण है।
  • एक प्रक्रिया डेटाबेस को लिखती है, दूसरी प्रक्रिया इसे पढ़ती है। यह इसे और अधिक स्केलेबल बनाता है, थोड़ा कम त्रुटि प्रवण, लेकिन अभी भी बहुत धीमी है।
  • मेरे पायथन प्रोग्राम को C++ एक या दूसरे तरीके से एम्बेड करें। मैंने उस समाधान को खारिज कर दिया क्योंकि दोनों कोड बेस उचित रूप से जटिल हैं, और मैंने उन्हें बनाए रखने के कारणों से अलग रखने के लिए प्राथमिकता दी।
  • मैं दोनों कार्यक्रमों में कुछ सॉकेट का उपयोग करता हूं, और सीधे संदेश भेजता हूं। यह एक उचित दृष्टिकोण प्रतीत होता है, लेकिन इस तथ्य का लाभ नहीं उठाता कि वे एक ही मशीन पर हैं (इसे स्थानीय मेजबान को गंतव्य के रूप में उपयोग करके थोड़ा अनुकूलित किया जाएगा, लेकिन फिर भी बोझिल लगता है)।
  • साझा स्मृति का उपयोग करें। अब तक मुझे लगता है कि यह सबसे संतोषजनक समाधान है जो मुझे मिला है, लेकिन इसे लागू करने के लिए थोड़ा अधिक जटिल होने की कमी है।

क्या ऐसे अन्य समाधान हैं जिन पर मुझे विचार करना चाहिए?

+0

सीधे सी ++/पायथन से पायथन/सी ++ कोड का उपयोग कर? –

+0

रीस्टफुल एपीआई आपको सबसे ज्यादा मदद करनी चाहिए, एक आदर्श भाषा स्वतंत्र एपीआई – AlokThakur

+0

@Revolver_Ocelot, मेरे पास 2 कोड बेस हैं, इसलिए हाँ मैं प्रत्येक में सीधे कोड का उपयोग कर सकता हूं। – DevShark

उत्तर

1

सबसे पहले, यह प्रश्न अत्यधिक राय आधारित है!

सबसे आसान तरीका उन्हें उसी प्रक्रिया में उपयोग करना होगा और उन्हें सीधे संवाद करना होगा। एकमात्र जटिलता उचित एपीआई और सी ++ -> पायथन कॉल को लागू करना है। जब आप नोट करते हैं और संभावित रूप से कम मजबूती (दोनों को एक साथ दुर्घटनाग्रस्त नहीं करते हैं, ज्यादातर मामलों में कोई समस्या नहीं है) और कम लचीलापन (क्या आप सुनिश्चित हैं कि आपको उन्हें विभिन्न मशीनों पर चलाने की आवश्यकता नहीं होगी?)। विस्तारशीलता सबसे अच्छी है क्योंकि अधिक संचार जोड़ने या मौजूदा बदलने के लिए यह बहुत आसान है। आप रखरखाव बिंदु पर पुनर्विचार कर सकते हैं। क्या आप ऐप का उपयोग कर सकते हैं w/o सी ++ समकक्ष? यदि नहीं, तो मैं रखरखाव के बारे में ज्यादा चिंता नहीं करता।

फिर साझा मेमोरी बेहतर रखरखाव के साथ अगली पसंद है लेकिन अन्य अन्य दोष भी है। विस्तारशीलता थोड़ा खराब है लेकिन अभी भी इतना बुरा नहीं है। यह जटिल हो सकता है, मुझे साझा स्मृति ऑपरेशन के लिए पायथन समर्थन नहीं पता है, सी ++ के लिए आप Boost.Interprocess पर एक नज़र डाल सकते हैं। मुख्य प्रश्न जो मैं पहले जांचता हूं वह प्रक्रियाओं के बीच सिंक्रनाइज़ेशन है।

फिर, नेटवर्क संचार। टिप्पणियों में उल्लिखित उच्च स्तरीय विकल्पों के लिए सॉकेट स्तर पर लागू सबसे सरल संभव बाइनरी प्रोटोकॉल से यहां बहुत सारे विकल्प हैं। यह निर्भर करता है कि आपका सी ++ < -> पाइथन संचार भविष्य में कितना जटिल हो सकता है। यह दृष्टिकोण लागू करने के लिए और अधिक जटिल हो सकता है, तीसरे पक्ष के पुस्तकालयों की आवश्यकता हो सकती है लेकिन एक बार यह एक्स्टेंसिबल और लचीला हो सकता है। आमतौर पर तृतीय पक्ष पुस्तकालय कोड जनरेशन (थ्रिफ्ट, प्रोटोबफ) पर आधारित होते हैं जो आपकी निर्माण प्रक्रिया को सरल नहीं बनाता है।

मैं इस मामले के लिए फ़ाइल सिस्टम या डेटाबेस पर गंभीरता से विचार नहीं करता।

+0

इस मामले में "उचित एपीआई" क्या है? मुझे यह नहीं मिला। वे अलग-अलग ऐप्स हैं। – Andrey

+0

मेरा मतलब है कि आप एक एपीआई जिसे आप सी ++ पक्ष से कॉल करना चाहते हैं, यह आपको जो कुछ भी चाहिए, वह हो सकता है, लेकिन इसे एक ही स्थान पर रखने के लिए बेहतर है, जैसे कि फ्लेड पैटर्न (https://en.wikipedia.org/wiki/ Facade_pattern), दर्द रहित रखरखाव के लिए। इस तरह का एक एपीआई ठीक होगा, इससे कोई फर्क नहीं पड़ता कि आप कौन से विकल्प चुनते हैं। –

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