मैं जावा में एक ढांचा तैयार कर रहा हूं जो घटनाओं को सुनेंगे और फिर उन्हें ज्योथन में संसाधित करेगा। अलग-अलग ईवेंट प्रकार अलग-अलग स्क्रिप्ट पर भेजे जाएंगे।कैसे जावा से चल रहे मल्टीथ्रेडेड ज्योथन स्क्रिप्ट्स?
चूंकि PythonInterpreter.exec() को कॉल करते समय ज्योथन को स्क्रिप्ट संकलित करने में काफी समय लगता है, इसलिए मुझे स्क्रिप्ट को पूर्व-संकलित करना होगा। मैं इसे नीचे दिए तरीक़े कर रहा हूँ:
// initialize the script as string (would load it from file in final version)
String script = "print 'foo'";
// get the compiled code object
PyCode compiled = org.python.core.__builtin__.compile(script, "<>", "exec");
PyCode संकलित वस्तु के रूप में की घटनाओं
PythonInterpreter pi = new PythonInterpreter();
pi.set("variable_1", "value_1");
pi.set("variable_x", "value_x");
pi.exec(compiled);
में आते हैं अब मेरी पहेली के लिए भंडार करने के लिए धक्का दिया और इस्तेमाल किया जाएगा - यह हो सकता है कई देखते हैं कि एक ही समय में कुछ प्रकार की घटनाएं हो रही हैं - इस प्रकार एक ही समय में स्क्रिप्ट के कई उदाहरण चल रहे हैं।
लगभग सभी लिपियों शायद अल्पकालिक रहेगा - 100 लाइनों, कोई छोरों पर निर्भर है। संख्या और आवृत्ति पूरी तरह से यादृच्छिक (उपयोगकर्ता उत्पन्न घटनाएं) है और प्रति ईवेंट प्रकार 0 से 200 प्रति सेकेंड तक हो सकती है।
ऐसा करने का सबसे अच्छा तरीका क्या होगा? मैं कुछ संभावनाएं पर देख रहा हूँ: ट्रिगर घटना बिंदु पर
- उपयोग तुल्यकालन - यह एक ही स्क्रिप्ट के कई उदाहरण रोका जा सके, लेकिन यह भी घटनाओं के रूप में जल्दी से संसाधित नहीं किया जाएगा के रूप में वे किया जाना चाहिए
- एक पूल बनाने एक ही प्रकार स्क्रिप्ट किसी भी तरह मूल PyCode वस्तु क्लोनिंग की आबादी की - इस तरह से अंतराल निकाल दिया जाता है - सबसे बड़ी समस्या शायद पूल आकार
- गतिशील जब भी जरूरत माता पिता से स्क्रिप्ट वस्तु क्लोन और फिर इसे त्यागने जब कार्यकारी() खत्म के अनुकूलन किया जाएगा संकलन से लेकिन यह अभी भी क्लोन विधि
शायद संख्या 2 और 3 का संयोजन सबसे अच्छा - गतिशील पूल आकार बनाना होगा?
तो, कोई विचार? ;)
अच्छा! एक आकर्षण की तरह काम करता है;) यह ध्यान दिया जाना चाहिए कि पहले Module.compile (...) से पहले PythonInterpreter का एक उदाहरण बनाया जाना चाहिए। यदि SyspathJavaLoader से NullPointerException नहीं फेंक दिया गया है।loadClass() आप सबसे अधिक उपयोगी रहे हैं। अब मुझे बस इतना करना है कि स्क्रिप्ट के गतिशील रूप से पुनः आकार देने योग्य पूल में इसे एकीकृत करें ... – nEJC
क्या आप ज्योथन 2.5 के लिए समकक्ष जानते हैं? – Laurent
@Laurent - नहीं, मैंने इस क्षेत्र को नहीं देखा है क्योंकि मैंने यह उत्तर – McDowell