python wsgi服务器中的全局对象

Pan*_*aj 5 python mod-wsgi global-variables

我正在使用python创建一个应用程序,该应用程序使用Web服务器服务于前端,并在将数据作为Web请求接受后,将任务转发到作业队列,该作业队列正在使用线程与主要处理功能共享。

但是问题在于,python Web服务器尝试导入自身以运行线程,并且在此过程中,几乎每个请求都会创建一个新的Job Queue,这破坏了逻辑。有什么方法可以在python Web服务器中设置全局变量,因为python Queue是线程安全的,我假设它不会造成任何危害。

(我尝试了两个Web服务器Flask和web.py)

Ada*_*ris -2

共享数据最好存储在数据库中。

如果您想要每个用户会话都有一个全局变量,那么您需要将它们与会话数据一起存储:以下是web.pyFlask的详细信息。

如果您有一个正在处理队列的持久进程,您可能会考虑使用 FastCGI 来运行您的服务器,其中您的 python 服务器可以在与 Web 服务器不同的实例中运行。查看如何为 web.py 配置 FastCGI - 看看这是否合适。Web 服务器将通过它自己的端口与 python 服务器通信,因此您的 python 服务器可以继续运行并维护任何全局数据。

[编辑]

由于您需要共享变量 - 您可以查看flask.g来查看flask,或者查看web.ctx来查看web.py。我从未使用过它们 - 所以我不知道是否存在邪恶的影响或性能问题。我在这里看到了一个示例,建议在 web.py 中执行以下操作:

import web

def add_global_hook():
    g = web.storage({"counter": 0})
    def _wrapper(handler):
        web.ctx.globals = g
        return handler()
    return _wrapper

class Hello:
    def GET(self):
        web.ctx.globals.counter += 1
        return "<h1>Counter: %d</h1>" % web.ctx.globals.counter

if __name__ == '__main__':
    urls = ("/", "Hello")
    app = web.application(urls, globals())
    app.add_processor(add_global_hook())
    app.run()
Run Code Online (Sandbox Code Playgroud)