web.py 共享变量

发布于 2024-11-01 18:15:17 字数 88 浏览 1 评论 0原文

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

对于这种情况,首选方式是什么。

谢谢。

In web.py i need to create a shared variable, for which multiple
threads(requests) can read or write to that variable.

What is the preferred way, for this kind of a situation.

thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

画离情绘悲伤 2024-11-08 18:15:17

我不确定这确实是一个 web.py 问题,但我们一直为进程范围的缓存(即由所有请求线程共享的字典缓存)执行此类操作。我们使用 web.py,但我下面的示例应该适用于任何多线程 Python Web 服务器。

酒店.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)

主要.py:

import hotels

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

I'm not sure this is really a web.py question, but we do this sort of thing all the time for process-wide caches (that is, dict caches that are shared by all request threads). We use web.py, but my example below should apply to any multi-threaded Python web server.

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()
离去的眼神 2024-11-08 18:15:17

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

就像

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

你可以在函数中初始化这些代码,然后处理它们:

app.add_processor(web.loadhook(init_func))

不确定它是否适用于您的场景

I find lots of code using this container: web.ctx

like

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

u can init those in a function, then process them:

app.add_processor(web.loadhook(init_func))

Not sure it works or not for your scenario

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文