tornado 從階乘伺服器看快取處理

2021-09-11 02:04:00 字數 1888 閱讀 5510

要求:定義乙個web伺服器,幫我們計算階乘。伺服器會提供快取,已經計算過的就存起來,下次直接讀取。

class factserver():

def __init__(self):

self.catch={} #字典記錄已經計算過的階乘

def catc(self,n): #計算階乘

if n in self.catch: #已存在時,直接返回

return self.catch[n]

s=1for i in range(1,n):

s*=i

self.catch[n]=s #記錄計算結果

return s

class facthander(tornado.web.requesthandler):

fact = factserver() # 例項化乙個服務物件

def get(self):

n=int(self.get_argument('n')) #獲取url中的引數n

self.write(str(self.fact.catc(n))) #使用階乘服務

使用服務時,不可以直接write(self.fact.catc(n)),需要轉化成字串,否則會提示錯誤。

在本地另起乙個新埠,訪問服務,需重新計算階乘。

因為:本地記憶體無法跨程序或跨機器共享。

用hash結構儲存計算結果,並返回乙個標誌布林值,代表是否被儲存過

class factserver():

def __init__(self):

# self.catch={} #字典記錄已經計算過的階乘

self.catch=redis.strictredis('localhost',6379) #用redis快取

self.key='factresult'

def catc(self,n): #計算階乘

if self.catch.hexists(self.key,str(n)): #檢視n在字段是否已存在

return str(self.catch.hget(self.key,str(n))),true

s=1for i in range(1,n):

s*=i

self.catch.hset(self.key,str(n),str(s)) #記錄計算結果

return str(s),false

列印成json形式:

class facthander(tornado.web.requesthandler):

fact = factserver() # 例項化乙個服務物件

def get(self):

n = int(self.get_argument('n')) # 獲取url中的引數n

result,catch=self.fact.catc(n)

ppp=

self.write(json.dumps(ppp))

儲存過的:

未儲存過的

開源伺服器Tornado的初步了解

文章結束給大家來個程式設計師笑話 m 明天看了下python的乙個新web框架,由facebook開源。不得不說,品牌效應啊,只要是facebook開源的目項,沒有不好用的。tornado可以說是好用到了極致,從開打官方面頁開始懂得,到搭建乙個web伺服器,只用了10分鐘。另外,tornado支撐w...

tornado 1 建立http伺服器

1.介紹乙個基礎框架 import tornado.web import tornado.ioloop class indexhandler tornado.web.requesthandler indexhandler只能接收get方法,不能接收post方法 def get self self.w...

Apache Geode 管理節點或伺服器快取

你使用xml宣告和應用程式程式設計介面結合的方式啟動你的節點或伺服器快取。當完成時關閉快取。geode節點是geode分布式系統成員,它不作為連到另外乙個geode分布式系統的客戶端。geode伺服器是監聽和處理客戶端請求的節點。建立你的快取 啟動乙個集群和集群配置服務 啟動乙個定位器,把 enab...