2013-04-18 4 views
5

मैं एक एनजीएक्सएक्स/गनिकॉर्न/बोतल स्टैक का उपयोग करके एक डब्लूएसजीआई ऐप लिख रहा हूं जो एक जीईटी अनुरोध स्वीकार करता है, एक साधारण प्रतिक्रिया देता है, और फिर खरगोश एमक्यू को एक संदेश लिखता है । अगर मैं सीधे बोतल के माध्यम से ऐप चला रहा था, तो जब भी ऐप प्राप्त होता है तो मैं खरगोशएमक्यू कनेक्शन का पुन: उपयोग कर रहा हूं। हालांकि, गनिकोर्न में, ऐसा लगता है कि मजदूर हर बार एमक्यू कनेक्शन को नष्ट कर रहे हैं और पुनर्निर्माण कर रहे हैं। मैं सोच रहा था कि उस कनेक्शन का पुन: उपयोग करने का कोई अच्छा तरीका है या नहीं।गनिकॉर्न श्रमिकों के बीच एक वस्तु साझा करना, या किसी कार्यकर्ता के भीतर किसी ऑब्जेक्ट को जारी रखना

अधिक विस्तृत जानकारी:

##This is my bottle app 
from bottle import blahblahblah 
import bottle 
from mqconnector import MQConnector 

mqc = MQConnector(ip, exchange) 

@route('/') 
def index(): 
    try: 
    mqc 
    except NameError: 
    mqc = MQConnector(ip, exchange) 

    mqc.publish('whatever message') 
    return 'ok' 

if __name__ == '__main__': 
    run(host='blah', port=808) 
app = bottle.default_app() 

उत्तर

5

ठीक है, यह मुझे सुलझाने के लिए एक छोटे से समय लिया। क्या हो रहा था, हर बार जब कोई नया अनुरोध आया, तो गुनीकॉर्न मेरी index() विधि चला रहा था और, इस तरह, MQConnector का एक नया उदाहरण बना रहा था।

फिक्स MQConnector को रिफैक्टर करना था, जैसे कि कक्षा होने के बजाय, यह केवल विधियों और चरों का एक गुच्छा था। इस तरह, प्रत्येक कार्यकर्ता ने MQConnector का एक नया उदाहरण बनाने के बजाय हर बार उसी MQConnector को संदर्भित किया। अंत में, मैंने एमक्यूकनेक्टर के publish() फ़ंक्शन को पास किया।

#Bottle app 
from blah import blahblah 
import MQConnector 

@route('/') 
def index(): 
    blahblah(foo, bar, baz, MQConnector.publish) 

और

#MQConnector 
import pika 
mq_ip = "blah" 
exhange_name="blahblah" 

connection=pika.BlockingConnection(.... 
... 

def publish(message, r_key): 
    ... 

परिणाम: एक कॉल कि 800ms ले जाते थे अब 4ms लेता है। मैं 90 गनिकॉर्न श्रमिकों में 80 कॉल/सेकेंड पर अधिकतम उपयोग करता था, और अब मैं 5 गनिकॉर्न श्रमिकों में लगभग 700 कॉल/सेकेंड अधिकतम करता हूं।

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