所以我在Tornado中有一个异步请求处理程序,它在向客户机写入内容并终止之后等待一些事件。
基本上是这样的:
async def post(self, request_url):
await my_semaphore.acquire()
try:
with await my_redis_pool as redis:
redis_value = await redis.brpop("my_value", timeout=very_long_timeout)
self.write(value)
finally:
my_semaphore.release()
print("The semaphore is released !")
除了一件事:如果客户机终止连接,处理程序会继续等待等待等待的任何事件。
当客户机关闭连接时,会调用在连接关闭时找到的;那么我可以从这个函数调用什么来“中断”等待中的主处理程序?有没有办法提出类似例外的问题?
def on_connection_close(self):
print("on_connection_close")
# what could I do here to interrupt whatever the post() method is awaiting
我试着打电话给
raise tornado.web.HTTPError(504)
从开到关,但不起作用。
“on_connection_close”会立即显示,但“信号灯已释放!”只有在非常长的超时后才显示。
事先谢谢!