2016-07-26 6 views
5

शीर्षक में यह है, लेकिन यहां कुछ विस्तार हैं। मान लीजिए कि मुख्य धागा एक और धागा पैदा करता है, जहां कुछ कोड पायथन दुभाषिया में लोड किया जाता है और फिर एक और धागा कहा जाता है जो एक ही पायथन इंटरफ़ेस (PyImport या PyRun के माध्यम से) के माध्यम से कुछ और कोड निष्पादित करता है। क्या ऐसा परिदृश्य व्यवहार्य है?क्या दो धागे एक ही एम्बेडेड पायथन दुभाषिया का एक साथ उपयोग कर सकते हैं?

+1

क्या आप दो थ्रेड समान एम्बेडेड दुभाषिया को साझा करना चाहते हैं? – mshildt

+0

@epicbrew yep, वही दुभाषिया, दोनों धागे एक ही स्मृति तक पहुंचने वाले – user3496846

उत्तर

2

यदि मैं आप जो पूछ रहा हूं उसका पालन कर रहा हूं, तो हाँ आप यह कर सकते हैं, लेकिन पाइथन दुभाषिया स्वयं पूरी तरह से थ्रेड सुरक्षित नहीं है। इसके आस-पास पहुंचने के लिए, आपको यह सुनिश्चित करना होगा कि प्रत्येक थ्रेड किसी भी पायथन कोड को कॉल करने से पहले दुभाषिया के GIL प्राप्त करता है और फिर इसे बाद में रिलीज़ करता है। यानी प्रत्येक धागा निम्नलिखित जब क्रियान्वित अजगर कोड करने की जरूरत है:

PyGILState_STATE gstate; 
gstate = PyGILState_Ensure(); 

// Do any needed Python API operations, execute python code 

// Release the GIL. No Python API allowed beyond this point. 
PyGILState_Release(gstate); 

इसके अलावा, आप धागे सुनिश्चित करने के लिए अजगर दुभाषिया शुरू करने के बाद निम्न करना चाहिए/जीआईएल ठीक से प्रारंभ कर रहे हैं:

if (! PyEval_ThreadsInitialized()) { 
    PyEval_InitThreads(); 
} 

के लिए Non Python Created Threads देखें इस पर अधिक जानकारी।

टिप्पणियों में उल्लिखित अनुसार, यह ध्यान देने योग्य है कि यह वास्तव में केवल दुभाषिया तक पहुंच को क्रमबद्ध करने के लिए है, लेकिन यह मानना ​​सबसे अच्छा है कि आप पाइथन के सीपीथन कार्यान्वयन का उपयोग कर रहे हैं।

+0

क्या आप निश्चित हैं, महाकाव्य? यह निश्चित रूप से मुझे लगता है कि आप (जैसे सबसे अच्छे ...) * serializing * धागे के एक दुभाषिया उदाहरण के उपयोग के लिए देख रहे हैं। ऐसा लगता है कि ओपी चाहता है कि प्रत्येक (सी ++) थ्रेड अपने पाइथन दुभाषिया-उदाहरण के लिए और समानांतर में दोनों को चलाने में सक्षम हो, सीडी + द्वारा किए गए थ्रेडिंग के साथ, पायथन नहीं। या, क्या मैं ओपी के इरादे को गलत पढ़ रहा हूं? –

+0

@ माइकरोबिन्सन मैंने सोचा कि वह दो धागे एक ही दुभाषिया साझा करना चाहता था। – mshildt

+0

हाँ, और, हालांकि, पाइथन के "धागे" "बस" प्रकार के 'धागे "हैं (क्योंकि, ज़ाहिर है, पायथन एक दुभाषिया है ...), मैं थोड़ी सी सोचता हूं कि मैं अपने थ्रेडिंग को पायथन कोड में डाल दूंगा। हम जानते हैं कि पायथन सही ढंग से * इसके * थ्रेडिंग के संस्करण का प्रबंधन करता है ... –

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