2013-04-07 1 views
4

J'ai besoin d'accéder à une variable globale qui maintient son état sur différentes requêtes du serveur.Comment utiliser une variable globale dans cherrypy?

Dans cet exemple, la variable globale est r et elle est incrémentée à chaque requête.

Comment puis-je faire r global dans cherrypy?

import cherrypy 
import urllib 
class Root(object): 
    @cherrypy.expose 

    def index(self, **params): 

     jsondict = [('foo', '1'), ('fo', '2')] 
     p = urllib.urlencode(jsondict) 
     if r!=1 
      r=r+1 
      raise cherrypy.HTTPRedirect("/index?" + p) 
     return "hi" 
cherrypy.config.update({ 

       'server.socketPort': 8080 

     }) 
cherrypy.quickstart(Root()) 
if __name__ == '__main__': 
    r=1 
+0

Quelle est exactement votre question? –

+1

Je mets à jour la question et avec cette variable globale r. J'ai l'erreur –

Répondre

5

Pour accéder à une variable globale, vous devez utiliser le mot-clé global suivi du nom de la variable. Toutefois, si r va être utilisé que dans la classe Root, je vous recommande de le déclarer comme une variable de classe:

class Root(object): 
    r = 1 
    @cherrypy.expose 
    def index(self, **params): 
     #... 
     if Root.r != 1: 
      Root.r += 1 
     #... 
2

J'ai eu le même problème. Il a été résolu après avoir réalisé que mon programme pouvait accéder aux variables membres d'une bibliothèque importée.

Tout d'abord, faire un fichier appelé myglobals.py et mettre cela en elle

r=0 
visitors = 0 

Ensuite, dans votre serveur:

import myglobals 
class Root(object): 
     @cherrypy.expose 
     def index(self, **params): 
      #... 
      if myglobals.r != 1: 
       myglobals.r += 1 
      #... 
+0

Bonne technique !!! –

+0

cela ne fonctionne pas si j'utilise une queue redis pour appeler une méthode, c'est-à-dire si j'ai une méthode qui met en file d'attente une méthode dans un fichier différent, la valeur modifiée de la variable n'est pas accessible. De plus, ma variable doit être modifiée lors de l'initialisation du serveur cherrypy – proprius

Questions connexes