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