2014-05-24 65 views
1

當我說鎖,我的意思是它切換到其他協程並切換回來,直到某些工作完成。有沒有辦法在龍捲風中「鎖定」請求,直到完成某些任務?

代碼會寫這樣的:

@waitUntil('myProcess') 
@gen.coroutine 
def query(): 
    do_query() 


@waitUntil('myProcess') 
@gen.coroutine 
def process(): 
    result = yield do_myProcess(params) 
    deal_result(result) 

這裏是我最好推遲到基於答案toro.Lock。不保證它是正確的,需要測試。

import toro 

_locks = {} 

def getLock(key): 
    if key not in _locks: 
     _locks[key] = toro.Lock() 
    return _locks[key] 


def waitUntil(key): 
    def wrapped(func): 
     @gen.coroutine 
     def wrapped2(*args,**kwargs): 
      with (yield getLock(key).acquire()): 
       result = yield func(*args,**kwargs) 
      return result 
     return wrapped2 
    return wrapped 

回答