我正在用python创建一个应用程序,它使用web服务器为前端提供服务,并在接受数据作为web请求后,将任务转发到作业队列,该队列使用线程与主处理函数共享。
但问题是,python web服务器试图导入自己来运行线程,并且在这个过程中,几乎每个请求都会创建一个新的作业队列,这破坏了逻辑。有没有什么方法可以在python web服务器中设置全局变量,因为python队列是线程安全的,我假设它不会造成任何伤害。
(我尝试了两个web服务器Flask和web.py)
发布于 2011-07-19 16:58:25
共享数据最好存储在数据库中。
如果您希望每个用户的会话都有一个全局变量,那么您需要将这些变量与会话数据一起存储:这里是details for web.py和for flask。
如果您有一个正在处理队列的持久进程,那么您可以考虑使用FastCGI来运行您的服务器,这样您的python服务器就可以在独立于您的web服务器的实例中运行。查看如何配置FastCGI for web.py -看看这是否合适。web服务器将通过它自己的端口与python服务器通信,因此您的python服务器可以保持运行并维护任何全局数据。
编辑
因为您需要共享变量-您可以在flask中查看flask.g,或者在web.py中查看web.ctx。我从来没有使用过它们--所以我不知道是否有恶意的影响或者性能问题。我看到了an example here,它在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()https://stackoverflow.com/questions/6744139
复制相似问题