तो, मेरे पास एक ऐसा एप्लिकेशन है जो ट्विस्ट + स्टॉम्पर को STOMP क्लाइंट के रूप में उपयोग करता है जो एक मल्टीप्रोसेसिंग के लिए काम करता है। श्रमिकों का पुल।मल्टीप्रोसेसिंग श्रमिकों के साथ ट्विस्ट नेटवर्क क्लाइंट?
# stompclient.py
logging.config.fileConfig(config_path)
logger = logging.getLogger(__name__)
# Add observer to make Twisted log via python
twisted.python.log.PythonLoggingObserver().start()
# initialize the process pool. (child processes get forked off immediately)
pool = multiprocessing.Pool(processes=processes)
StompClientFactory.username = username
StompClientFactory.password = password
StompClientFactory.destination = destination
reactor.connectTCP(host, port, StompClientFactory())
reactor.run()
इस हो जाता तैनाती के लिए पैक, मैंने सोचा कि मैं लाभ ले जाएगा के रूप में:
यह ठीक काम करने के लिए जब मैं सिर्फ इस आग है, जो (सरलीकृत) एक अजगर स्क्रिप्ट का उपयोग प्रतीत होता है कुछ इस तरह दिखता ट्विस्टेड स्क्रिप्ट का और इसे एक टैक फ़ाइल से चलाएं।
यहाँ मेरी बहुत-समान दिखने वाले टैक फ़ाइल है:
# stompclient.tac
logging.config.fileConfig(config_path)
logger = logging.getLogger(__name__)
# Add observer to make Twisted log via python
twisted.python.log.PythonLoggingObserver().start()
# initialize the process pool. (child processes get forked off immediately)
pool = multiprocessing.Pool(processes=processes)
StompClientFactory.username = username
StompClientFactory.password = password
StompClientFactory.destination = destination
application = service.Application('myapp')
service = internet.TCPClient(host, port, StompClientFactory())
service.setServiceParent(application)
चित्रण के लिए, मैं संक्षिप्त या कुछ विवरण बदल गए हैं; उम्मीद है कि वे समस्या का सार नहीं थे। उदाहरण के लिए, मेरे ऐप में एक प्लगइन सिस्टम है, पूल को एक अलग विधि द्वारा शुरू किया जाता है, और उसके बाद पूल को मेरी प्लगइन की प्रक्रिया() विधियों में से एक को पूल.apply_async() का उपयोग करके पूल में सौंप दिया जाता है।
इसलिए, यदि मैं स्क्रिप्ट चलाता हूं (stompclient.py), सब कुछ अपेक्षित काम करता है।
यह भी ठीक काम करने के लिए अगर मैं गैर डेमॉन मोड में मोड़ (-n) चलाने प्रकट होता है:
twistd -noy stompclient.tac
तथापि, यह नहीं काम करता है जब मैं डेमॉन मोड में चलाएँ:
twistd -oy stompclient.tac
एप्लिकेशन ठीक शुरू होता प्रतीत होता है, लेकिन जब यह काम बंद करने का प्रयास करता है, तो यह बस लटकता है। "लटकता" से मेरा मतलब है कि ऐसा लगता है कि बच्चे की प्रक्रिया को कभी भी कुछ करने के लिए नहीं कहा जाता है और माता-पिता (जिसे pool.apply_async() कहा जाता है) बस लौटने की प्रतिक्रिया के लिए इंतजार कर बैठता है।
मुझे यकीन है कि मैं ट्विस्ट + मल्टीप्रोसेसिंग के साथ कुछ बेवकूफ कर रहा हूं, लेकिन मैं वास्तव में उम्मीद कर रहा हूं कि कोई मेरे दृष्टिकोण में मेरी गलती को समझा सकता है।
अग्रिम धन्यवाद!
यह * बेहद उपयोगी था। धन्यवाद! –