下面是我的基本处理程序。我只想服务器一个映像,请求完成后,我想写redis,但当我运行下面的代码时,on_finish不会被调用。在
import cyclone.web
import cyclone.redis
from twisted.internet import defer
from twisted.internet import reactor
tt = cyclone.redis.lazyConnectionPool()
class PixelHandler(cyclone.web.RequestHandler):
@cyclone.web.asynchronous
def get(self):
qs = qs_decode(self.request.query)
self.set_header('Content-Type', 'image/gif')
self.write(pixel)
redisPixelWrite(remote_ip)
#self.finish()
def on_finish(self):
t = yield tt.multi()
yield t.set('key', 'value')
r = yield t.commit()
print "commit=", repr(r)
除非调用了
self.finish()
,否则不会调用on_finish
。我相信你已经知道了。 本例中的问题是on_finish()不支持defer.inlineCallbacks
(您没有用它修饰您的on_finish()
方法,但是这样做没有帮助)。在我认为重写
on_finish()
以使用简单的旧延迟将使这项工作成功。试试这样的方法:更好的方法是用}的主体移动到其中。在
defer.inlineCallbacks()
修饰你的get()
方法,并将{cyclone的当前版本支持用}。因此,修复代码很容易:
inlineCallbacks
装饰{相关问题 更多 >
编程相关推荐