हम एक छोटे सी सर्वर अनुप्रयोग विकसित कर रहे हैं। सर्वर एप्लिकेशन कुछ डेटा प्रोसेसिंग करता है और क्लाइंट को वापस जवाब देता है। डेटा प्रसंस्करण भाग को कॉन्फ़िगर करने योग्य और लचीला रखने के लिए हमने स्क्रिप्टिंग के लिए जाने और विभिन्न तैयार मॉड्यूल की उपलब्धता के आधार पर निर्णय लिया कि हमने पाइथन के लिए जाने का निर्णय लिया है। हम सी और पायथन के बीच डेटा भेजने/प्राप्त करने के लिए पायथन-सी एपीआई का उपयोग कर रहे हैं।पायथन-सी एपीआई समवर्ती मुद्दा
एल्गोरिथ्म कुछ इस तरह काम करता है: -
- सर्वर क्लाइंट से कुछ डेटा प्राप्त करता है, इस डेटा एक शब्दकोश ग में बनाया में संग्रहित है। शब्दकोश एपीआई फ़ंक्शन PyDict_New() का उपयोग करके बनाया गया है; सी से इनपुट को एपीआई फ़ंक्शन PyDict_SetItemString() का उपयोग करके शब्दकोश में एक महत्वपूर्ण मूल्य जोड़ी के रूप में संग्रहीत किया जाता है;
- अगला, हम पायथन स्क्रिप्ट PyRun_SimpleString() निष्पादित करते हैं; एक पैरामीटर के रूप में स्क्रिप्ट पास करना। यह स्क्रिप्ट सी में बनाए गए शब्दकोश का उपयोग करता है। कृपया ध्यान दें, हम cI में निर्मित शब्दकोश को बनाते हैं, जो कि PyImport_AddModule() विधियों का उपयोग करके स्क्रिप्ट के लिए सुलभ है; और PyModule_AddObject();
- हम स्क्रिप्ट में डेटा प्रसंस्करण के परिणाम को उपरोक्त बनाए गए उसी शब्दकोश में एक महत्वपूर्ण मूल्य जोड़ी के रूप में संग्रहीत करते हैं। सी कोड तब स्क्रिप्ट निष्पादित होने के बाद परिणाम परिवर्तनीय (कुंजी-मूल्य जोड़ी) तक पहुंच सकता है।
समस्या समस्या हम सामना कर रहे हैं विभिन्न ग्राहकों से आ रही समवर्ती अनुरोधों के मामले में है। जब विभिन्न अनुरोधों से एकाधिक अनुरोध आते हैं तो हम संदर्भ गणना अपवादों को ऑब्जेक्ट करते हैं। कृपया ध्यान दें, कि उपयोगकर्ता के लिए प्रत्येक अनुरोध के लिए, हम अकेले उस उपयोगकर्ता के लिए एक स्वतंत्र शब्दकोश बनाते हैं। इस समस्या को दूर करने के लिए हमने कॉल को PyRun_SimpleString() में शामिल किया; PyEval_AququireLock() के भीतर; और PyEval_ReleaseLock() ;, लेकिन ऐसा करने के परिणामस्वरूप स्क्रिप्ट निष्पादन अवरुद्ध कॉल है। इसलिए यदि किसी स्क्रिप्ट को निष्पादित करने में लंबा समय लग रहा है, तो अन्य सभी उपयोगकर्ता भी प्रतिक्रिया की प्रतीक्षा कर रहे हैं।
क्या आप कृपया सर्वोत्तम संभव दृष्टिकोण का सुझाव दे सकते हैं या पॉइंटर्स दे सकते हैं कि हम कहां गलत हो रहे हैं। कृपया मुझे अधिक जानकारी के लिए पिंग करें।
किसी भी मदद/मार्गदर्शन की सराहना की जाएगी।
संदर्भ जेन के लिए धन्यवाद। संयोग से, मैंने उन कार्यों को कॉल किया था, लेकिन यह अभी भी काम नहीं करेगा। – Will