साथ बहु सूत्रण मैं एक सी ++ प्रोग्राम सी एपीआई मेरा एक अजगर पुस्तकालय उपयोग करने के लिए उपयोग करता है। पाइथन लाइब्रेरी और सी ++ दोनों कोड बहुप्रचारित हैं।पायथन और सी एपीआई
विशेष रूप से, सी ++ प्रोग्राम का एक थ्रेड एक पाइथन ऑब्जेक्ट को तत्काल करता है जो threading.Thread
से प्राप्त होता है। मुझे उस ऑब्जेक्ट पर कॉल करने में सक्षम होने के लिए मेरे सभी सी ++ धागे की आवश्यकता है।
मेरी पहली कोशिशों से (मैं मूर्खतापूर्ण वस्तु को मुख्य थ्रेड से तुरंत चालू करता हूं, फिर कुछ समय प्रतीक्षा करें, फिर विधि को कॉल करें) मैंने देखा कि ऑब्जेक्ट से जुड़े पायथन थ्रेड का निष्पादन बस जैसे ही बंद हो जाता है निष्पादन सी ++ कार्यक्रम में वापस आता है।
यदि निष्पादन पायथन के साथ रहता है (उदाहरण के लिए, यदि मैं PyRun_SimpleString("time.sleep(5)");
पर कॉल करता हूं) पाइथन थ्रेड का निष्पादन पृष्ठभूमि में जारी रहता है और प्रतीक्षा समाप्त होने तक सब कुछ ठीक काम करता है और निष्पादन सी ++ पर वापस चला जाता है।
मैं जाहिर है कुछ गलत कर रहा हूँ। दोनों मेरे सी ++ और पायथन मल्टीथ्रेड किए गए और एक-दूसरे के साथ काम करने में सक्षम बनाने के लिए मुझे क्या करना चाहिए? मेरे पास मैदान में कोई पिछला अनुभव नहीं है इसलिए कृपया कुछ भी न मानें!
मुझे खेद है, लेकिन मुझे लगता है कि यह ठीक से समझ में नहीं आता है। यहां मैं क्या करता हूं: 1) 'PyGILState_STATE gstate; gstate = PyGILState_Ensure(); ' 2) अजगर उद्देश्य यह है कि से' threading.Thread' विरासत बनाएं 3) 'PyGILState_Release (gstate);' 4) कुछ सेकंड (C++) में के लिए नींद रन फ़ंक्शन, ऑब्जेक्ट को थोड़ी देर में कुछ प्रिंट करना चाहिए, लेकिन यह केवल कुछ ही मिलीसेकंड के लिए स्पष्ट रूप से करता है। मैं क्या गलत कर रहा हूं..? –