web.py 共享变量

4 投票
2 回答
2074 浏览
提问于 2025-04-16 15:48

在web.py中,我需要创建一个共享变量,让多个线程(请求)可以读取或写入这个变量。

在这种情况下,最好的做法是什么呢?

谢谢。

2 个回答

1

我发现很多代码都在使用这个容器:web.ctx

比如:

web.ctx.orm = scoped_session(sessionmaker(bind=engine))
web.ctx.session = web.config._session

你可以在一个函数里初始化这些,然后进行处理:

app.add_processor(web.loadhook(init_func))

不太确定这是否适合你的情况。

2

我不太确定这是不是一个关于web.py的问题,但我们经常会做这种事情,主要是为了在整个进程中共享缓存(也就是说,所有请求线程都能共享的字典缓存)。我们使用web.py,不过我下面的例子应该适用于任何多线程的Python网络服务器。

hotels.py:

cache = {}

def load_cache():
    """Load hotels into {id: data} dict cache."""
    rows = db.select('hotels')
    for row in rows:
        cache[row.id] = row

def get_hotel(hotel_id):
    """Get data for hotel with given ID, or return None if not found."""
    if not cache:
        raise Exception('hotels cache not loaded')
    return cache.get(hotel_id)

main.py:

import hotels

def main():
    hotels.load_cache()
    start_server()

撰写回答