【问题标题】:how to use coroutine in tornado as a global initialize request handler如何在龙卷风中使用协程作为全局初始化请求处理程序
【发布时间】:2023-03-21 06:19:01
【问题描述】:

我想在所有请求(GET、POST..)之前使用一个基本的requestHander从redis获取全局参数,并且我在tornado web中使用协程作为async&await。但是我使用 aredis 到客户端 redis-server ,并且 baseHandler 不支持在 init 方法中使用 async,因为我需要当 Class super 父类可以获取参数或请求已经从 redis 确认检查参数。
像这样的代码。

import aredis
redis_client = aredis.StricRedis('redis://xxxx') 
class BaseHandler(tornado.web.requestHander):
    def check_request(self):
         check_one = await redis_client.get(self.request.body['param'])
         if not check_one:
             self.finish(dict(msg='refused'))
    async def get_params(self):
         data = await redis_client.get('xxx')
         self.data = data

class UserHander(BaseHander):
     async def get(self,*args,**kwargs):
         data = self.data
         return self.finish(data)

【问题讨论】:

    标签: python async-await tornado


    【解决方案1】:

    请参阅RequestHandler.prepare() 方法。你可以在你的子类中创建这个方法,它会在每个请求方法之前被调用。

    例子:

    class BaseHandler(...):
        async def prepare(self):
           # your code here ...
    

    【讨论】:

    • 是的!啊,我会的
    猜你喜欢
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多