【问题标题】:How do I use a global variable in cherrypy?如何在cherrypy中使用全局变量?
【发布时间】:2013-03-29 07:06:55
【问题描述】:

我需要访问一个全局变量,以根据不同的服务器请求保持其状态。

在本例中,全局变量为r,并在每次请求时递增。

如何在cherrypy中使r全局化?

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

【问题讨论】:

  • 你的问题到底是什么?
  • 我更新了问题并使用这个变量 global r。我有错误

标签: python python-3.x cherrypy mako


【解决方案1】:

要访问全局变量,您必须使用global 关键字,后跟变量名。但是,如果r 只在Root 类中使用,我建议您将其声明为类变量:

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。在意识到我的程序可以访问导入库的成员变量后解决了。

    首先,创建一个名为 myglobals.py 的文件并将其放入其中

    r=0
    visitors = 0
    

    然后在你的服务器中:

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

    【讨论】:

    • 如果我使用redis队列来调用一个方法它不起作用,即如果我有一个方法基本上将一个方法排入不同的文件中,除非特别通过,否则无法访问变量的修改值方法的价值。另外,我的变量必须在启动cherrypy服务器时修改
    猜你喜欢
    • 2012-06-14
    • 2021-05-23
    • 2018-08-26
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多