tornado:阶乘服务器+圆周率,多个服务共用redis

增加一个圆周率计算的服务,同样已计算过的结果需要存储,同样用redis处理缓存,应该怎么做?

定义一个pi服务,除了计算部分几乎没改动

class piserver():
    def __init__(self):
        self.catch = redis.StrictRedis('localhost', 6379)  # 用redis缓存
        self.key = 'piresult'
    def catc(self,n):
        if self.catch.hexists(self.key, str(n)):  # 查看n在字段是否已存在
            return str(self.catch.hget(self.key, str(n))), True
        s = 0.0
        for i in range(n):
            s+=1.0/(2*i+1)/(2*i+1)
        s=math.sqrt(s*8)
        self.catch.hset(self.key, str(n), str(s))  # 记录计算结果
        return str(s), False

定义hander:

class pihander(tornado.web.RequestHandler):
    pi = piserver()  # 实例化一个服务对象
    def get(self):
        n = int(self.get_argument('n'))  # 获取url中的参数n
        result,catch=self.pi.catc(n)
        ppp={
            'n':n,
            'result':result,
            'catch':catch
        }
        self.set_header('Content_Type','application/json;charset=utf-8')
        self.write(json.dumps(ppp))

注册路由:

def make_app():
    return tornado.web.Application([(r'/fact',facthander),(r'/pi',pihander)])

redis部分重复,那么单独将配置写出来:

def make_app():
    catch = redis.StrictRedis('localhost', 6379)    #配置redis存储缓冲
    fact=factserver(catch)                           #实例化对象,传递参数
    pi=piserver(catch)
    return tornado.web.Application([(r'/fact',facthander,{'fact':fact}),(r'/pi',pihander,{'pi',pi})])
    #传递带catch的对象

修改piserver初始化函数:

 def __init__(self,catch):
     # self.catch = redis.StrictRedis('localhost', 6379)  # 用redis缓存
     self.catch = catch  # 用redis缓存
     self.key = 'piresult'

修改pihander实例化部分:

    def isinstance(self,pi):
        self.pi=pi
    # pi = piserver()  # 实例化一个服务对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值