def open(self, *args, **kwargs): if self.context_preserved: _request_ctx_stack.pop() self.context_preserved = False kwargs.setdefault('environ_overrides', {}) \ ['flask._preserve_context'] = self.preserve_context old = _request_ctx_stack.top try: return Client.open(self, *args, **kwargs) finally: self.context_preserved = _request_ctx_stack.top is not old
""" An important caveat to this is that any operation relate to database must be MANUALLY committed, otherwise may result potential operation lost. """ def future(*args, **kwargs): rv = _request_ctx_stack.push( request_ctx ) if not _request_ctx_stack.top and request_ctx else None result = None try: result = method(*args, **kwargs) except Exception, ex: raise ex finally: if rv: _request_ctx_stack.pop() try: db.session.remove() except Exception, ex: print ex if index is None: return result else: return dict(index=index, data=result) return future def pool_executor(executor): if executor == CONCURRENT_EXECUTOR_THREAD: return futures.ThreadPoolExecutor
def __exit__(self, exc_type, exc_value, tb): self.preserve_context = False if self.context_preserved: _request_ctx_stack.pop()
from flask.globals import _request_ctx_stack from functools import partial def _lookup_req_object(name): top = _request_ctx_stack.top if top is None: raise RuntimeError('没有') return getattr(top, name) class foo(object): def __init__(self): self.xxx = 123 self.kkk = 345 req = partial(_lookup_req_object, 'xxx') XXX = partial(_lookup_req_object, 'kkk') _request_ctx_stack.push(foo()) v1 = req() print(v1) v2 = XXX() print(v2) _request_ctx_stack.pop() #移除