2011-04-15 133 views
4

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

对于这种情况,最好的方法是什么?

谢谢。

+0

也许是数据库? – nosklo 2011-04-15 13:39:08

+1

也许给你一些你想要完成的细节。 – krs1 2011-04-15 13:39:39

+0

您应该说明变量将包含的数据类型和大小,数据的敏感程度以及您将多久写一次并从中读取数据。 – nosklo 2011-04-15 13:40:06

回答

2

我不确定这是否是一个真正的web.py问题,但我们始终为进程范围的高速缓存(即所有请求线程共享的字典高速缓存)执行此类操作。我们使用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() 
1

我用这个容器找到大量的代码的东西:web.ctx

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

你可以初始化那些函数,然后proc ESS他们:

app.add_processor(web.loadhook(init_func)) 

不知道它的工作原理或不适合您的方案