2011-02-22 13 views
5

पर cherrypy अनुप्रयोग चल मैं एक मौजूदा cherrypy आवेदन है, लेकिन मुझे पता है कि अगर यह सब पर gevent WSGI सर्वर पर इसे चलाने के लिए संभव है चाहता हूँ। मुझे कल्पना है कि मैं कर सकता हूं लेकिन मेरे पास गींटेंट का परीक्षण करने के लिए लिनक्स सर्वर तक पहुंच नहीं है और यह मेरे मैक पर चलाने में सक्षम नहीं है।gevent WSGI सर्वर

मैं धारणा यह संभव है के बाद से हर तरफ WSGI युक्ति इस प्रकार के तहत हूं।

क्या किसी ने यह कोशिश की है?

मुझे लगता है कि एक उदाहरण निम्नलिखित दिखाई देगा:

import cherrypy 
from gevent import wsgi 

class Root(object): 
    def index(self): 
     return "hi!" 
    index.exposed = True 

app = cherrypy.tree.mount(Root(), '/') 
wsgi.WSGIServer(('', 8088), app).serve_forever() 

उत्तर

2

कि उदाहरण के ठीक काम करता है। मुझे यकीन है कि freenode पर #gevent किसी भी स्थापना के मुद्दों के साथ आपकी मदद करेगा।

+0

हाँ मैं उस के बाद से चेरी के पेड़ और आवेदन वस्तुओं एक _callable_ कि सभी अपेक्षा के अनुरूप काम करना चाहिए होते हैं ... मैं बाहर freenode भी एक दूरस्थ परीक्षण मंच की जांच करेंगे की पुष्टि की। चीयर्स! वास्तव में – deecodameeko

3

यह उदाहरण तब तक काम करेगा जब तक आप चेरीपी हैंडलर के अंदर ग्रीनलेट स्विच का सामना न करें! तो यदि आप हैंडलर के अंदर एसिंक्रोनस संचार के लिए भूगर्भ का उपयोग करते हैं तो यह असफल हो जाएगा।

cherrypy प्रतिक्रिया और हेडर के भंडारण के लिए वैश्विक ऑब्जेक्ट का उपयोग करता cherrypy/__ init__.py:~350 के अंदर पाए अंदर:

# Create request and response object (the same objects will be used 
# throughout the entire life of the webserver, but will redirect 
# to the "serving" object) 
request = _ThreadLocalProxy('request') 
response = _ThreadLocalProxy('response') 

आप प्रसंस्करण के लिए एक अनुरोध और gevent स्विच रोक देते हैं तो उसके बगल में ऊपर लिख देगा सामग्री-लंबाई वैश्विक वस्तु में शीर्षलेख और आपको क्लाइंट पक्ष पर अजीब त्रुटियों का सामना करना पड़ेगा।

+0

। अगर किसी को ग्रीनलेट्स का उपयोग करना चाहते हैं तो किसी को ग्रीनलेट-स्थानीय ऑब्जेक्ट के साथ थ्रेडलोकल "सेवारत" ऑब्जेक्ट को प्रतिस्थापित करना चाहिए। – fumanchu

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