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

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

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

瀏覽:53日期: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久久,三上悠亚国产精品一区二区三区
av中文字幕在线观看第一页| 免费观看日韩电影| 综合激情一区| 亚洲欧美日韩精品一区二区| 亚洲视频综合| 亚洲视频播放| 中文字幕日韩欧美精品高清在线| 日韩精品一二三区| 最新亚洲国产| 国产精品久久久久久久久久妞妞 | 亚洲精品一二三**| 久久国产视频网| 日本美女一区| 中文字幕高清在线播放| 麻豆中文一区二区| 日韩久久精品| 国产精品99免费看| 蜜桃久久av| 四虎在线精品| 丁香婷婷久久| 欧美日韩亚洲一区在线观看| 日韩高清成人在线| 91亚洲一区| 日韩极品在线观看| 美女久久久久| 久久av中文| 蜜桃视频免费观看一区| 久久精品国产在热久久| 都市激情国产精品| 日韩高清不卡一区| 欧美精品一线| 国产精品地址| 一区久久精品| 免费观看久久久4p| 国产综合精品| 国产在视频一区二区三区吞精| 伊人久久大香线蕉av超碰演员| 国产精品久久| 日韩影院免费视频| 亚洲国产综合在线看不卡| 国精品产品一区| 国产日韩一区二区三区在线 | 亚洲aa在线| 日本精品在线中文字幕| 午夜在线精品偷拍| 99热国内精品| 亚洲二区精品| 99热精品久久| 欧美xxxx中国| 国产精品久久久久久模特| 中文字幕一区日韩精品| 三级精品视频| 国产精品115| 日韩美女国产精品| 亚洲精品网址| 99视频精品| 欧美理论视频| 国产亚洲网站| 亚洲精品系列| 精品久久电影| 日韩视频在线一区二区三区| 国产精品成人a在线观看| 91欧美极品| 日韩动漫一区| 欧美色综合网| 国产精品成人3p一区二区三区| 日韩高清电影一区| 日韩国产一区二| 免费在线观看一区| 国产欧美日韩免费观看| 欧美亚洲三级| 国产精品va视频| 激情综合五月| 久久久精品五月天| 99国产精品| 亚洲精品系列| 国产日韩欧美| 日韩欧美三级| 免费欧美日韩| 日韩精品五月天| 精品国产亚洲一区二区在线观看| 成人一区不卡| 婷婷丁香综合| 欧美一区自拍| 成人在线视频区| 九色精品91| 欧美久久精品| 久久人人精品| 日韩精品亚洲专区在线观看| 国产精品天堂蜜av在线播放| 一区二区三区四区日本视频| 亚洲一区二区成人| 久久久精品国产**网站| 亚洲精品小说| 精品国产一区二| 免费美女久久99| 中文字幕在线免费观看视频| 久久午夜视频| 中文字幕色婷婷在线视频| 欧美日韩国产欧| 精品视频91| 日韩黄色在线观看| 欧美日韩中文字幕一区二区三区| 中文字幕视频精品一区二区三区| 国产一区二区三区四区二区 | 日本a口亚洲| 午夜久久黄色| 国产suv精品一区二区四区视频 | 久久精品国产99国产| 性欧美长视频| 国产一区福利| 国产极品一区| 首页国产欧美久久| 色婷婷久久久| 国产成人免费视频网站视频社区| 亚洲一区二区三区久久久| 成人羞羞视频播放网站| 精品香蕉视频| 欧美激情aⅴ一区二区三区| 亚洲尤物av| 爽爽淫人综合网网站| 亚洲欧洲另类| 一区二区视频欧美| 亚洲精品中文字幕乱码| 久久精品国产www456c0m| 国产一区二区三区黄网站| 国产日韩一区二区三区在线播放| 伊人久久亚洲| 日韩精品视频中文字幕| 日韩精品午夜视频| 久久精品97| 久久精品午夜| 97在线精品| 国户精品久久久久久久久久久不卡| 日韩精品免费一区二区三区| 99久久婷婷| 午夜宅男久久久| 日韩精品第二页| 免费在线播放第一区高清av| 精品免费视频| 亚洲涩涩在线| 在线国产一区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 另类国产ts人妖高潮视频| 蜜桃久久久久久| 国产欧美高清| 中文字幕系列一区| 视频一区在线视频| 国产精品久久久免费| 人在线成免费视频| 国产亚洲一区在线| 国产亚洲精品精品国产亚洲综合| 麻豆视频在线看| 欧美综合另类| 欧美在线首页| 久久九九电影| 日韩高清不卡在线| 97精品国产| 色综合视频一区二区三区日韩 | 国产精品精品| 亚洲综合日本| 精品国产欧美日韩一区二区三区| 欧美日韩中文一区二区| 国产调教精品| 欧美中文一区二区| 麻豆精品蜜桃视频网站| 亚洲激情国产| 天堂√8在线中文| 国产麻豆精品| 蜜臀av一区二区三区| 福利一区和二区| 欧美午夜三级| 综合激情在线| 免费视频亚洲| 成人精品视频| 麻豆成人在线观看| 日韩精品欧美精品| 一区久久精品| 天堂资源在线亚洲| 久久只有精品| 88久久精品| 亚洲青青久久| 国产精品毛片一区二区三区| 久久精品一区二区不卡| 卡一精品卡二卡三网站乱码| 日本午夜精品视频在线观看| 噜噜噜久久亚洲精品国产品小说| 欧美丰满日韩| 国产一区二区三区四区| 美女国产一区二区三区| 日韩高清欧美激情| 日韩精品午夜视频| 午夜电影一区| 欧美日韩xxxx| 日本v片在线高清不卡在线观看| 视频一区二区不卡| 一区二区亚洲视频| 日韩精品1区2区3区| 日本91福利区| 国产精品xxx在线观看|