首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python wsgi服务器中的全局对象

python wsgi服务器中的全局对象
EN

Stack Overflow用户
提问于 2011-07-19 16:14:12
回答 1查看 3.3K关注 0票数 5

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

但问题是,python web服务器试图导入自己来运行线程,并且在这个过程中,几乎每个请求都会创建一个新的作业队列,这破坏了逻辑。有没有什么方法可以在python web服务器中设置全局变量,因为python队列是线程安全的,我假设它不会造成任何伤害。

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

EN

回答 1

Stack Overflow用户

发布于 2011-07-19 16:58:25

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

如果您希望每个用户的会话都有一个全局变量,那么您需要将这些变量与会话数据一起存储:这里是details for web.pyfor flask

如果您有一个正在处理队列的持久进程,那么您可以考虑使用FastCGI来运行您的服务器,这样您的python服务器就可以在独立于您的web服务器的实例中运行。查看如何配置FastCGI for web.py -看看这是否合适。web服务器将通过它自己的端口与python服务器通信,因此您的python服务器可以保持运行并维护任何全局数据。

编辑

因为您需要共享变量-您可以在flask中查看flask.g,或者在web.py中查看web.ctx。我从来没有使用过它们--所以我不知道是否有恶意的影响或者性能问题。我看到了an example here,它在web.py中建议做一些类似的事情:

代码语言:javascript
复制
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()
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6744139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档