0
夥計。我正在閱讀web.py源代碼以瞭解WSGI框架如何工作。爲什麼在生成器函數中調用清除代碼?
當讀取application.py模塊時,我想知道爲什麼在清理中調用self._cleanup這是一個生成器函數。
我搜索使用生成器的原因,如this,但我不知道爲什麼在這裏使用生成器。
這裏是代碼塊:
def wsgi(env, start_resp):
# clear threadlocal to avoid inteference of previous requests
self._cleanup()
self.load(env)
try:
# allow uppercase methods only
if web.ctx.method.upper() != web.ctx.method:
raise web.nomethod()
result = self.handle_with_processors()
if is_generator(result):
result = peep(result)
else:
result = [result]
except web.HTTPError, e:
result = [e.data]
result = web.utf8(iter(result))
status, headers = web.ctx.status, web.ctx.headers
start_resp(status, headers)
def cleanup():
self._cleanup()
yield '' # force this function to be a generator
return itertools.chain(result, cleanup())
感謝您的回覆。這是合理的。我重新思考代碼,我猜想另一個原因是儘快將結果返回給客戶端,然後再做清理工作以避免延遲。不確定是否正確。 – 2011-05-03 15:53:02