在開發過程中,如果存在查詢很費時間,還經常要點選同乙個操作的時候,我們可以使用下面的方式;查詢後我們先把資料存在redis中,設定乙個過期時間,如果在過期時間內,他在此進行了本次操作,我們可以直接返回給他redis中快取的資料,而不用在此進行查詢了。
importjson
import
logging
import
pickle
import
threading
import
time
from redis import
redis
class
cache(redis):
def__init__
(self, host, port, db, password):
self.host =host
self.port =port
self.password =password
self.db =db
super(cache, self).
__init__(host=self.host, port=self.port, db=self.db, password=password)
route_cache =
class
queueservice(object):
q = cache(**route_cache)
task_key = "
search_task_key
"def
__init__
(self, func):
self.func =func
self.task = threading.thread(target=self.start)
self.task.daemon =true
self.task.start()
@staticmethod
def send_task(key, **kwargs):
d =
#存入乙個狀態
queueservice.q.set(key, pickle.dumps())
kwargs.update(d)
#修改 上面儲存的資料 填入 res 資料百分比(執行緒任務)
queueservice.q.lpush(queueservice.task_key, json.dumps(kwargs))
defstart(self):
while
true:
try:
time.sleep(2)
param =queueservice.q.rpop(queueservice.task_key)
except
exception:
param =none
ifparam:
param =json.loads(param)
key = param.pop("
key"
) res_to_store =
queueservice.q.set(key, pickle.dumps(res_to_store), ex=300)
上方**是 鏈結了redis資料庫,在有請求過來的時候,我們會有乙個執行緒一直在跑,看是否有我們要處理的資料。
defget_result(key):
result =queueservice.q.get(key)
ifnot
result:
return -1,
res =pickle.loads(result)
return res.get("
task_status
"), res.get("
res")
這裡的**是,每次請求的時候,我們要先判斷一下,redis 中是否有快取,如果已經有快取,我們可以直接拿快取,而不用在此進行查詢了。
IONIC WebApp之防止短時間內按鈕多次點選
因網路延遲的緣故,對著某個按鈕狂點導致請求過多,剛開始想直接把按鈕disabled掉,然後發覺這個按鈕是div樣式,並用的ng click做的事件繫結,因而並不奏效。如果博友們有其他的解決方法,求提供啊 config provide function provide else,delay,false...
中級應該如何在短時間內備考?
準備經濟師考試的複習安排可以拉的比較長,且不會占用過多時間,無基礎也一樣不占用太多時間 但這樣需要2年才能考完拿證。如果想速度一年內拿證則至少要將複習安排時間加長一倍以上。一 具體備考安排 1.報班跟學,這樣會省不少時間,可以倍速學習,然後對照教材進行學習安排。報班的安排如下 跟著網課學習第一遍教材...
Azure短時間內不會變成GitHub上的首選雲
techweb報道 6 月 6 日訊息,微軟收購github一事,成為了目前開發人員 fsxtpy雲計算廠商最為關注的話題,沒有之一。大家都在猜測程式設計客棧這個全球第二大雲基礎設施服務廠商,將如何對待那些在其他雲提供商上執行 的github使用者。github創始人chris wanstrath表...