0

是否可以设置一个线程或类似的东西来在每个服务器请求中存储一个值?

我了解来自线程或全局变量的值仅在每个服务器请求期间获取/设置,而且这些值不能脱离上下文更改,因为一切都在“映射”类中完成。

尽管我只是对此感到好奇,因为在每个请求上设置一个值并对其进行操作会很棒,但我不知道它可能是存储在内存中的变量,以便以后可以引用它。

我这样说是因为会话、cookie 和与 Web 应用程序相关的所有内容只能通过每个 GET/POST 请求进行操作。到目前为止,这就是我所拥有的:

import web
import threading


threadlocal = threading.local()

def set_value():
    setattr(threadlocal, 'mythread', 'threadvalue')


def get_value():
    return getattr(threadlocal, 'mythread', None)




urls = (
    "/set_thread_value", "set_thread_value",
    "/get_thread_value", "get_thread_value"
)


app = web.application(urls, globals())



t_globals = {
    'template_thread': get_value()
}    
render = web.template.render('templates', globals=t_globals)



class set_thread_value:
    def GET(self):

        set_value()

        return get_value()




class get_thread_value:
    def GET(self):

        return get_value()

正如您在调用“set_thread_value”时所看到的那样,您设置了线程值并将其显示在屏幕上,但是当您调用“get_thread_value”时,您将获得 None 。

您可能还注意到我想将线程传递给模板,以便可以显示更新后的值。

编辑:我不想使用 mysql、mongodb 或任何其他存储系统来设置线程中的值。

提前致谢。

4

1 回答 1

3

您应该使用memcache(或redis)之类的东西来存储您需要跨请求保留在内存中的内容和值。这是关于全局变量的相关问题:

Python Django 全局变量

于 2012-11-25T20:32:47.420 回答