【问题标题】:web.py shared variablesweb.py 共享变量
【发布时间】:2011-08-06 08:39:29
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 也许可以更详细地说明您要完成的工作。
  • 您应该说明该变量将包含什么类型和大小的数据,数据的敏感程度,以及写入和读取的频率。
  • 抱歉信息缺失。对变量的读写非常频繁(每秒数百次)。所以数据库不是一个选择。想想一个整数。
  • memcached 没问题。但就我而言,运行 memcached 不是一种选择。

标签: python web.py


【解决方案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 问题,但我们一直在为进程范围的缓存(即所有请求线程共享的 dict 缓存)做这种事情。我们使用 web.py,但我下面的示例应该适用于任何多线程 Python Web 服务器。

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-14
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多