日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python多線程編程之threading模塊詳解

瀏覽:56日期:2022-06-21 11:51:31
一、介紹

線程是什么?線程有啥用?線程和進程的區別是什么?

線程是操作系統能夠進行運算調度的最小單位。被包含在進程中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。

二、Python如何創建線程2.1 方法一:

創建Thread對象

步驟:

1.目標函數

2.實例化Thread對象

3.調用start()方法

import threading# 目標函數1def fun1(num): for i in range(num):print(’線程1: 第%d次循環:’ % i)# 目標函數2def fun2(lst): for ele in lst:print(’線程2: lst列表中元素 %d’ % ele)def main(): num = 10 # 實例化Thread對象 # target參數一定為一個函數,且不帶括號 # args參數為元組類型,參數為一個時一定要加逗號 t1 = threading.Thread(target=fun1, args=(num,)) t2 = threading.Thread(target=fun2, args=([1, 2, 3, 4, 5],)) # 調用start方法 t1.start() t2.start()if __name__ == ’__main__’: main()2.2 方法二:

創建子類繼承threading.Thread類

import threadingimport osclass Person(threading.Thread): def run(self):self.sing(5)self.cook() @staticmethod def sing(num):for i in range(num): print(’線程[%d]: The person sing %d song.’ % (os.getpid(), i)) @staticmethod def cook():print(’線程[%d]:The person has cooked breakfast.’ % os.getpid())def main(): p1 = Person() p1.start() p2 = Person() p2.start()if __name__ == ’__main__’: main()三、線程的用法3.1 確定當前的線程

import threadingimport timeimport loggingdef fun1(): print(threading.current_thread().getName(), ’starting’) time.sleep(0.2) print(threading.current_thread().getName(), ’exiting’)def fun2(): # print(threading.current_thread().getName(), ’starting’) # time.sleep(0.3) # print(threading.current_thread().getName(), ’exiting’) logging.debug(’starting’) time.sleep(0.3) logging.debug(’exiting’)logging.basicConfig( level=logging.DEBUG, format=’[%(levelname)s] (%(threadName)-10s) %(message)s’)def main(): t1 = threading.Thread(name=’線程1’, target=fun1) t2 = threading.Thread(name=’線程2’, target=fun2) t1.start() t2.start()if __name__ == ’__main__’: main()3.2 守護線程

區別

普通線程:主線程等待子線程關閉后關閉 守護線程:管你子線程關沒關,主線程到時間就關閉

守護線程如何搞

方法1:構造線程時傳入dameon=True 方法2:調用setDaemon()方法并提供參數True

import threadingimport timeimport loggingdef daemon(): logging.debug(’starting’) # 添加延時,此時主線程已經退出,exiting不會打印 time.sleep(0.2) logging.debug(’exiting’)def non_daemon(): logging.debug(’starting’) logging.debug(’exiting’)logging.basicConfig( level=logging.DEBUG, format=’[%(levelname)s] (%(threadName)-10s) %(message)s’)def main(): # t1 = threading.Thread(name=’線程1’, target=daemon) # t1.setDaemon(True) t1 = threading.Thread(name=’線程1’, target=daemon, daemon=True) t2 = threading.Thread(name=’線程2’, target=non_daemon) t1.start() t2.start() # 等待守護線程完成工作需要調用join()方法,默認情況join會無限阻塞,可以傳入浮點值,表示超時時間 t1.join(0.2) t2.join(0.1)if __name__ == ’__main__’: main()3.3 控制資源訪問

目的:

Python線程中資源共享,如果不對資源加上互斥鎖,有可能導致數據不準確。

import threadingimport timeg_num = 0def fun1(num): global g_num for i in range(num):g_num += 1 print(’線程1 g_num = %d’ % g_num)def fun2(num): global g_num for i in range(num):g_num += 1 print(’線程2 g_num = %d’ % g_num)def main(): t1 = threading.Thread(target=fun1, args=(1000000,)) t2 = threading.Thread(target=fun1, args=(1000000,)) t1.start() t2.start()if __name__ == ’__main__’: main() time.sleep(1) print(’主線程 g_num = %d’ % g_num)

互斥鎖

import threadingimport timeg_num = 0L = threading.Lock()def fun1(num): global g_num L.acquire() for i in range(num):g_num += 1 L.release() print(’線程1 g_num = %d’ % g_num)def fun2(num): global g_num L.acquire() for i in range(num):g_num += 1 L.release() print(’線程2 g_num = %d’ % g_num)def main(): t1 = threading.Thread(target=fun1, args=(1000000,)) t2 = threading.Thread(target=fun1, args=(1000000,)) t1.start() t2.start()if __name__ == ’__main__’: main() time.sleep(1) print(’主線程 g_num = %d’ % g_num)

互斥鎖引發的另一個問題:死鎖

死鎖產生的原理:

Python多線程編程之threading模塊詳解

import threadingimport timeg_num = 0L1 = threading.Lock()L2 = threading.Lock()def fun1(): L1.acquire(timeout=5) time.sleep(1) L2.acquire() print(’產生死鎖,并不會打印信息’) L2.release() L1.release()def fun2(): L2.acquire(timeout=5) time.sleep(1) L1.acquire() print(’產生死鎖,并不會打印信息’) L1.release() L2.release()def main(): t1 = threading.Thread(target=fun1) t2 = threading.Thread(target=fun2) t1.start() t2.start()if __name__ == ’__main__’: main() time.sleep(1) print(’主線程 g_num = %d’ % g_num)

如何避免產生死鎖:

鎖超時操作

import threadingimport timeg_num = 0L1 = threading.Lock()L2 = threading.Lock()def fun1(): L1.acquire() time.sleep(1) L2.acquire(timeout=5) print(’超時異常打印信息1’) L2.release() L1.release()def fun2(): L2.acquire() time.sleep(1) L1.acquire(timeout=5) print(’超時異常打印信息2’) L1.release() L2.release()def main(): t1 = threading.Thread(target=fun1) t2 = threading.Thread(target=fun2) t1.start() t2.start()if __name__ == ’__main__’: main() time.sleep(1) print(’主線程 g_num = %d’ % g_num)

到此這篇關于Python多線程編程之threading模塊詳解的文章就介紹到這了,更多相關python threading模塊內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
9999国产精品| 香蕉久久国产| 97成人超碰| 国产一卡不卡| 国产精品欧美日韩一区| 日韩精品五月天| 视频一区视频二区中文字幕| 久久xxxx| 久久国产视频网| 日韩精品三区四区| 国产欧美一区二区三区国产幕精品 | 精品成人免费一区二区在线播放| 成年男女免费视频网站不卡| 日韩精品欧美| 亚洲精品1区| 日本一区福利在线| 久久av超碰| 偷拍精品精品一区二区三区| 国产一区二区中文| 99成人超碰| 视频一区国产视频| 日本强好片久久久久久aaa| 欧美影院视频| 三上亚洲一区二区| 欧美午夜不卡| 91欧美精品| 国产suv精品一区二区四区视频| 三级小说欧洲区亚洲区| 久久高清免费观看| 久久av网址| 麻豆视频在线观看免费网站黄 | 国产精品毛片aⅴ一区二区三区| 91精品福利观看| 国产欧洲在线| 欧美日韩亚洲在线观看| 日韩亚洲精品在线| 日本免费新一区视频| 久草精品视频| 欧洲毛片在线视频免费观看| 蜜臀精品久久久久久蜜臀 | 色88888久久久久久影院| 1024精品久久久久久久久| 日韩 欧美一区二区三区| 久久精品伊人| 亚洲欧洲一区| 日韩av黄色在线| 精品捆绑调教一区二区三区| 亚洲精品黄色| 日韩欧美一区二区三区免费看| 亚洲一区国产| 国产精品久久亚洲不卡| 亚洲网站视频| 国产精品videosex极品| 亚洲国产一区二区三区在线播放| 欧美一区影院| 在线日韩中文| 欧美日韩1区| 亚洲www啪成人一区二区| 亚洲资源在线| 国产一区一一区高清不卡| 日韩午夜电影| 国产不卡精品| 日韩1区2区3区| 欧美成人日韩| 久久精品一区二区国产| 亚洲视频国产精品| 欧洲精品一区二区三区| 日韩黄色在线观看| 久久国产中文字幕| 国产亚洲字幕| 香蕉精品999视频一区二区| 久久国产视频网| 91九色精品| 国产乱码精品一区二区亚洲| 国产精品人人爽人人做我的可爱| 成人在线视频区| 欧美一区激情| 日韩在线a电影| 欧美日韩亚洲在线观看| 久久精品女人| 日韩成人午夜精品| 国产视频一区三区| 日本少妇一区| 国产精品777777在线播放| 欧美中文字幕一区二区| 国产精品午夜一区二区三区| 成人羞羞视频播放网站| 国产美女撒尿一区二区| 日韩精品一级中文字幕精品视频免费观看 | 91福利精品在线观看| 欧美在线影院| 在线天堂资源www在线污| 在线午夜精品| bbw在线视频| 美女毛片一区二区三区四区最新中文字幕亚洲 | 欧美精品一区二区久久| 成人一二三区| 久久久国产精品网站| 欧美日韩 国产精品| 五月激激激综合网色播| 国产精品社区| 五月天综合网站| 色偷偷色偷偷色偷偷在线视频| 日韩精品视频中文字幕| 日韩中文字幕一区二区三区| 一区二区三区视频免费观看| 青青青免费在线视频| 国产va免费精品观看精品视频| 国产欧美一区二区三区国产幕精品| 亚洲国产专区校园欧美| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产精品国码视频| 欧美日韩xxxx| 日韩精品国产欧美| 影院欧美亚洲| 伊人久久婷婷| 亚洲资源av| 香蕉精品999视频一区二区| 亚洲深夜福利| 久久亚洲黄色| 狠狠久久伊人| 福利一区视频| 国产成人精品亚洲线观看| 久久精品免费看| 国产成人免费av一区二区午夜| 精品国产aⅴ| 成人亚洲一区二区| 精品中文在线| 国产精品一区二区99| 欧美亚洲色图校园春色| 99国产精品99久久久久久粉嫩| 激情欧美一区二区三区| 免费成人性网站| 麻豆精品蜜桃视频网站| 99免费精品| 日本不卡视频在线观看| 国产suv精品一区| 日韩亚洲在线| 国产精品亚洲二区| 亚洲福利久久| 日韩精品五月天| 成年男女免费视频网站不卡| 91久久中文| 欧美激情视频一区二区三区在线播放| 国产+成+人+亚洲欧洲在线| 欧美日韩国产高清电影| 日韩不卡一区二区三区 | 美女精品在线观看| 国产欧美亚洲一区| 久久国产欧美| 欧美一区二区三区久久| 99精品在线观看| 欧美在线日韩| 美女网站一区| 美女视频黄久久| 噜噜噜久久亚洲精品国产品小说| 国产精品调教| 欧美一区三区| 国产精品美女在线观看直播| 午夜久久一区| 精品入口麻豆88视频| 美女尤物久久精品| 日韩a一区二区| 日本成人在线不卡视频| 色爱综合av| 国产精品15p| 国产精品外国| 日韩一区电影| 91p九色成人| 精品中文字幕一区二区三区av| 国产麻豆一区| 久久电影一区| 美女av在线免费看| 欧美一区成人| 国产精品三上| 日韩在线综合| 久久成人福利| 日日夜夜免费精品| 好吊一区二区三区| 色一区二区三区| 亚洲有吗中文字幕| 日韩成人三级| 国产精品亚洲成在人线| 男女性色大片免费观看一区二区| 亚洲黄色免费看| 久久99影视| 亚洲精品激情| 色爱av综合网| 精品国产美女a久久9999| 日韩精品三区四区| 中文久久精品| 久久婷婷av| 欧美丰满日韩| 毛片不卡一区二区| 久久精品超碰| 亚洲视频二区| 天堂va在线高清一区| 久久精品av麻豆的观看方式| 免费精品国产的网站免费观看| 国产精品久久久久久久久久妞妞|