Reputation: 2103
I need to access a global variable that keeps its state over diffferent server requsts.
In this example the global variable is r
and it is incremented at each request.
How can I make r
global in 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
Upvotes: 5
Views: 2672
Reputation: 565
I had the same problem. It was solved after realizing my program could access the member variables of an imported library.
First, make a file called myglobals.py and put this in it
r=0
visitors = 0
Then in your server:
import myglobals
class Root(object):
@cherrypy.expose
def index(self, **params):
#...
if myglobals.r != 1:
myglobals.r += 1
#...
Upvotes: 3
Reputation: 20679
To access a global variable, you have to use the global
keyword followed by the name of the variable. However, if r
is going to be used only in the Root
class, I recommend you to declare it as a class variable:
class Root(object):
r = 1
@cherrypy.expose
def index(self, **params):
#...
if Root.r != 1:
Root.r += 1
#...
Upvotes: 7