5

さまざまなサーバー要求で状態を保持するグローバル変数にアクセスする必要があります。

この例では、グローバル変数はrであり、リクエストごとにインクリメントされます。

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
4

2 に答える 2

7

グローバル変数にアクセスするには、globalキーワードの後に​​変数の名前を続ける必要があります。ただし、クラスでrのみ使用する場合はRoot、クラス変数として宣言することをお勧めします。

class Root(object):
    r = 1
    @cherrypy.expose
    def index(self,  **params):
        #...
        if Root.r != 1:
            Root.r += 1
        #...
于 2013-04-07T03:22:00.463 に答える
3

私も同じ問題を抱えていました。私のプログラムがインポートされたライブラリのメンバー変数にアクセスできることに気付いた後、解決されました。

まず、 myglobals.pyというファイルを作成し、これを入れます。

r=0
visitors = 0

次に、サーバーで:

import myglobals  
class Root(object):
        @cherrypy.expose
        def index(self,  **params):
            #...
            if myglobals.r != 1:
                myglobals.r += 1
            #...
于 2014-01-18T00:09:57.293 に答える