2011-02-22 11 views
5

Ho un'applicazione cherrypy esistente, ma voglio sapere se è possibile eseguirlo sul server gevent wsgi. Immagino di poterlo fare ma non ho accesso a un server linux per testare gevent e non sono riuscito a farlo funzionare sul mio Mac.applicazione cherrypy in esecuzione su gevent wsgi server

Sono sotto l'impressione che questo è possibile dal momento che ogni lato segue wsgi spec.

Qualcuno ha provato questo?

immagino un esempio potrebbe essere simile al seguente:

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() 

risposta

2

Questo esempio funziona bene. Sono sicuro che #gevent su freenode ti aiuterà con qualsiasi problema di installazione.

+0

Sì, ho confermato che dal momento che il ciliegio e gli oggetti dell'applicazione contengono un _callable_ che tutti dovrebbero funzionare come previsto ... controllerò anche freenode per una piattaforma di test remota. Saluti! – deecodameeko

3

Questo esempio funzionerà fino a quando non si incontra l'interruttore di Greenlet all'interno di cherrypy handler! Quindi questo fallirà se si utilizza gevent per la comunicazione asincrona all'interno dei gestori.

cherrypy utilizza oggetto globale per memorizzare risposta e le intestazioni all'interno trovato all'interno 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') 

Se si sospende uno switch richiesta e gevent al trattamento successivo verrà sovrascritta content-length intestazione nell'oggetto globale e si troveranno ad affrontare strani errori sul lato client.

+0

Infatti. Qualcuno dovrebbe sostituire l'oggetto "servente" threadlocal con uno verde-locale se vogliono usare i greenlet. – fumanchu