gpt4 book ai didi

python - 尽早初始化 cherrypy.session

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:49 25 4
gpt4 key购买 nike

我喜欢 CherryPy 的 session API,除了一个细节。我不想说 cherrypy.session["spam"],而是想说 session["spam"]

不幸的是,我不能简单地在我的一个模块中有一个全局 from cherrypy import session,因为 cherrypy.session 对象直到第一个才被创建发出页面请求的时间。有什么方法可以让 CherryPy 立即初始化其 session 对象,而不是在第一个页面请求时初始化?

如果答案是否定的,我有两个丑陋的选择:

首先,我可以做这样的事情

def import_session():
global session
while not hasattr(cherrypy, "session"):
sleep(0.1)
session = cherrypy.session

Thread(target=import_session).start()

这感觉像是一个大杂烩,但我真的很讨厌每次都写 cherrypy.session["spam"],所以对我来说这是值得的。

我的第二个解决方案是做类似的事情

class SessionKludge:
def __getitem__(self, name):
return cherrypy.session[name]
def __setitem__(self, name, val):
cherrypy.session[name] = val

session = SessionKludge()

但这感觉像是一个更大的问题,我需要做更多的工作来实现其他字典功能,例如 .get

所以我肯定更喜欢一种简单的方法来自己初始化对象。有谁知道如何做到这一点?

最佳答案

对于 CherryPy 3.1,您需要找到 Session 的正确子类,运行其“setup”类方法,然后将 cherrypy.session 设置为 ThreadLocalProxy。这一切都发生在 cherrypy.lib.sessions.init 中,在以下 block 中:

# Find the storage class and call setup (first time only).
storage_class = storage_type.title() + 'Session'
storage_class = globals()[storage_class]
if not hasattr(cherrypy, "session"):
if hasattr(storage_class, "setup"):
storage_class.setup(**kwargs)

# Create cherrypy.session which will proxy to cherrypy.serving.session
if not hasattr(cherrypy, "session"):
cherrypy.session = cherrypy._ThreadLocalProxy('session')

减少(用你想要的子类替换 FileSession):

FileSession.setup(**kwargs)
cherrypy.session = cherrypy._ThreadLocalProxy('session')

“kwargs”由“timeout”、“clean_freq”和来自 tools.sessions.* 配置的任何子类特定条目组成。

关于python - 尽早初始化 cherrypy.session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/168167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com