日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python多线程加锁异步处理装饰器

發布時間:2025/6/16 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多线程加锁异步处理装饰器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

前言:

????????雖談python多線程帶有全局鎖PIL,似乎對性能提升沒什么意義,一般考慮多進程或者協程,但PIL沒有被去掉還是應該有它的用意的,一來不用考慮線程安全問題,在者處理小事務,多線程還是有一定程序上的便利性的,以下將簡單描述一下應用業務上的多線程技術。

問題描述:

1.對于web請求,需要某些api需要做異步處理,例如:對于一個web請求,數據校驗通過了,然后進行保存,對于用戶來說,需要得到一個快速的響應才是很好的體驗,檢驗成功的數據,也沒必要讓用戶作無謂的保存等待。

2.對于保存的數據,需要異常的拋出邏輯異常讓上層捕捉。

3.對于異步處理,需要加入隊列(加鎖),防止數據保存混亂。

4.開發使用需要簡單,只需要加入裝飾器即可。

5.被裝飾的函數,有獨立的鎖,互不影響浪費時間。

見代碼:

# encoding:utf-8 # usr/bin/python import time import hashlib import pickle import threading from functools import wrapslock_dict = {}class MyThread(threading.Thread):def __init__(self, func, args=None, kwargs=None):super(MyThread, self).__init__()self.func = funcself.args = argsself.kwargs = kwargsself.key = hashlib.sha1(pickle.dumps((self.func.func_name,))).hexdigest()self.result = None@propertydef lock(self):lock = lock_dict.get(self.key)if not lock:lock = threading.RLock()lock_dict[self.key] = lockreturn lockdef run(self):""""重寫start方法,加鎖,邏輯處理異常拋出異常,這里可以拓展結果返回"""try:if self.lock.acquire():self.result = self.func(*self.args)except:raisefinally:self.lock.release()def get_result(self):try:return self.result # 獲取時候需要t.join(), 不然主線程比子線程跑的快,會拿不到結果except:raisedef thread_function(function):"""多線程路由函數獨立鎖(函數名作為唯一識別,保證函數線程安全)"""@wraps(function)def run(*args, **kwargs):try:t = MyThread(function, args=args, kwargs=kwargs)t.start()except:raisereturn rundef thread_lock(function):"""多線程路由函數獨立鎖(函數名作為唯一識別,保證函數線程安全)"""@wraps(function)def run(*args, **kwargs):try:key = hashlib.sha1(pickle.dumps((function.func_name,))).hexdigest()lock = lock_dict.get(key)if not lock:lock = threading.RLock()lock_dict[key] = lockif lock.acquire():function(*args, **kwargs)except:raisefinally:lock.release()return runa = 0@thread_function def test(j, k=1):global atime.sleep(5)a += 1print "a{},j{},k{}".format(a, j, k)b = 0@thread_lock def test2(j, k=1):global btime.sleep(5)b += 1print "b{},j{},k{}".format(b, j, k)def run_1():for ca in range(10):print "a"test(1, 2)def run2():for ca in range(10):print "b"t = threading.Thread(target=test2, args=(1,), kwargs={"k": 2}) # 異步處理數據避免阻塞t.start()if __name__ == "__main__":run_1()run2()

輸出:

a
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
a1,j1,k2
b1,j1,k2
a2,j1,k2
b2,j1,k2
a3,j1,k2
b3,j1,k2
a4,j1,k2
b4,j1,k2
a5,j1,k2
b5,j1,k2
a6,j1,k2
b6,j1,k2
a7,j1,k2
b7,j1,k2
a8,j1,k2
b8,j1,k2
a9,j1,k2
b9,j1,k2
a10,j1,k2
b10,j1,k2

?

轉載于:https://my.oschina.net/yves175/blog/1579727

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的python多线程加锁异步处理装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线视频导航 | 自拍视频在线观看 | 成人小视频免费看 | 久久2019| 成人手机在线观看 | 国产精品久久综合视频 | 欧美偷拍一区二区三区 | 国产午夜一级片 | 女同av在线 | 91天堂素人 | 国内毛片毛片毛片毛片 | 亚洲黄色片在线观看 | 中文字幕色片 | 国内久久久久 | 小情侣高清国产在线播放 | 日韩一区二区在线视频 | 深爱五月激情五月 | 国产一区二区三区中文字幕 | 毛片基地视频 | 深夜精品 | 国产午夜精品一区二区理论影院 | 色多多在线视频 | 91淫黄大片 | 国产精品美女主播 | 成人手机在线播放 | 欧美精品在线一区二区 | 久久99精品久久久久久三级 | 成人国产精品免费观看 | 青青五月天 | 欧美理论片在线观看 | 日本人视频69式jzzij | 偷自拍| 中文字幕av无码一区二区三区 | 日本人视频69式jzzij | 亚洲国产99 | a∨色狠狠一区二区三区 | 欧美午夜一区二区三区 | 国产美女精品久久久 | 毛片无遮挡高清免费观看 | 天天艹天天操 | 国产人成| 性一交一乱一区二区洋洋av | 动漫3d精品一区二区三区乱码 | 欧美日韩五区 | 高h校园不许穿内裤h调教 | 久久免费看少妇高潮v片特黄 | 丰满多毛的大隂户视频 | 日本在线一本 | 开心成人激情 | 精品久久久蜜桃 | 人妻一区二区三区四区 | 亚洲911精品成人18网站 | 色中色综合 | 亚洲视频三区 | 欧美女人天堂 | 亚洲AV无码乱码国产精品牛牛 | 国产中文字幕亚洲 | 中国女人内谢69xxxx | 怎么可能高潮了就结束漫画 | 半推半就一ⅹ99av | 亚洲加勒比| 51精产品一区一区三区 | 色一情一乱一伦 | 久久人人视频 | 夜间福利在线观看 | 午夜精品久久久久久久久久久 | 午夜av中文字幕 | 日本爱爱免费视频 | 三级黄片毛片 | 久热在线视频 | 中国新婚夫妻性猛交 | 草久久久久久 | 草草影院网址 | 调教女m荡骚贱淫故事 | 亚洲一区二区在线播放 | 日本少妇吞精囗交视频 | 午夜精品视频一区二区三区在线看 | 精品黑人一区二区三区观看时间 | 免费裸体视频女性 | 韩国一区二区在线观看 | 亚洲午夜精品久久久久久人妖 | 日皮视频网站 | 免费毛片一区二区三区 | 国产精品一区二区性色av | 中文国产| 国产伦精品免费视频 | 91中文字幕在线视频 | 91成人小视频 | 最新中文字幕久久 | 久99热| 亚洲精品在线一区二区 | 91视频你懂的| 久久一本精品 | 91九色网| www.黄色网| 亚洲欧美激情一区二区三区 | 草草浮力影院 | 精品在线第一页 | 免费av视屏|