gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Python線程的創(chuàng)建與常用方法(實例詳解)

本篇文章給大家?guī)砹岁P于python的相關知識,其中主要介紹了關于線程的創(chuàng)建與常用的方法,還有一些線程演示案例,下面一起來看一下,希望對大家有幫助。

Python線程的創(chuàng)建與常用方法(實例詳解)

推薦學習:python視頻教程

線程的創(chuàng)建與使用

在Python中有很多的多線程模塊,其中 threading 模塊就是比較常用的。下面就來看一下如何利用 threading 創(chuàng)建線程以及它的常用方法。

線程的創(chuàng)建 -threading

函數(shù)名 介紹 舉例
Thread 創(chuàng)建線程 Thread(target, args)

Thread 的動能介紹:通過調(diào)用 threading 模塊的 Thread 類來實例化一個線程對象;它有兩個參數(shù): target 與 args (與創(chuàng)建進程時,參數(shù)相同)。target 為創(chuàng)建線程時要執(zhí)行的函數(shù),而 args 為是要執(zhí)行這個函數(shù)時需要傳入的參數(shù)。

線程對象的常用方法

接下里看一下線程對象中都有哪些常用的方法:

函數(shù)名 介紹 用法
start 啟動線程 start()
join 阻塞線程直到線程執(zhí)行結束 join(timeout=None)
getName 獲取線程的名字 getName()
setName 設置線程的名字 setName(name)
is_alive 判斷線程是否存活 is_alive()
setDaemon 守護線程 setDaemon(True)
  • start 函數(shù):啟動一個線程;沒有任何返回值和參數(shù)。
  • join 函數(shù):和進程中的 join 函數(shù)一樣;阻塞當前的程序,主線程的任務需要等待當前子線程的任務結束后才可以繼續(xù)執(zhí)行;參數(shù)為 timeout:代表阻塞的超時時間。
  • getName 函數(shù):獲取當前線程的名字。
  • setName 函數(shù):給當前的線程設置名字;參數(shù)為 name:是一個字符串類型
  • is_alive 函數(shù):判斷當前線程的狀態(tài)是否存貨
  • setDaemon 函數(shù):它是一個守護線程;如果腳本任務執(zhí)行完成之后,即便進程池還沒有執(zhí)行完成業(yè)務也會被強行終止。子線程也是如此,如果希望主進程或者是主線程先執(zhí)行完自己的業(yè)務之后,依然允許子線程繼續(xù)工作而不是強行關閉它們,只需要設置 setDaemon() True 就可以了。

PS:通過上面的介紹,會發(fā)現(xiàn)其實線程對象里面的函數(shù)幾乎和進程對象中的函數(shù)非常相似,它們的使用方法和使用場景幾乎是相同的。

線程演示案例

單線程初始案例

演示 多線程之前 先看一下下面這個案例,運行結束后看看共計耗時多久

1、定義一個列表,里面寫一些內(nèi)容。

2、再定義一個新列表,將上一個列表的內(nèi)容隨機寫入到新列表中;并且刪除上一個列表中隨機獲取到的內(nèi)容。

3、這里需要使用到 r andom 內(nèi)置模塊

代碼示例如下:

# coding:utf-8import timeimport random   old_lists = ['羅馬假日', '怦然心動', '時空戀旅人', '天使愛美麗', '天使之城', '倒霉愛神', '愛樂之城']new_lists = []def work():     if len(old_lists) == 0:     # 判斷 old_list 的長度,如果為0 ,則表示 該列表的內(nèi)容已經(jīng)被刪光了         return ''old_list' 列表內(nèi)容已經(jīng)全部刪除'     old_choice_data = random.choice(old_lists)      # random 模塊的 choice函數(shù)可以隨機獲取傳入的 old_list 的元素     old_lists.remove(old_choice_data)               # 當獲取到這個隨機元素之后,將該元素從 old_lists 中刪除     new_choice_data = '%s_new' % old_choice_data    # 將隨機獲取到的隨機元素通過格式化方式重新賦值,區(qū)別于之前的元素     new_lists.append(new_choice_data)               # 將格式化的新的隨機元素添加至 new_lists 列表      time.sleep(1)if __name__ == '__main__':     strat_time = time.time()      for i in range(len(old_lists)):         work()      if len(old_lists) ==0:         print(''old_lists' 當前為:{}'.format(None))     else:         print((''old_lists' 當前為:{}'.format(old_lists)))      if not len(new_lists) == 0:         print((''new_lists' 當前為:{}'.format(new_lists)))     else:         print(''new_lists' 當前為:{}'.format(None))      end_time = time.time()     print('運行結束,累計耗時:{} 秒'.format(end_time - strat_time))

運行結果如下:


Python線程的創(chuàng)建與常用方法(實例詳解)

從運行輸出結果我們可以看到整個腳本運行共計耗時7秒,而且 new_lists 列表內(nèi)的元素都經(jīng)過格式化處理后加上了 _new ;不僅如此, 因為 random模塊的choice函數(shù) 原因,new_lists 的內(nèi)容順序與 old_lists 也是不一樣;每次運行順序都會不一樣,所以 old_lists 的順序是無法得到保障的。


多線程演示案例

代碼示例如下:

# coding:utf-8import timeimport randomimport threading   old_lists = ['羅馬假日', '怦然心動', '時空戀旅人', '天使愛美麗', '天使之城', '倒霉愛神', '愛樂之城']new_lists = []def work():     if len(old_lists) == 0:     # 判斷 old_list 的長度,如果為0 ,則表示 該列表的內(nèi)容已經(jīng)被刪光了         return ''old_list' 列表內(nèi)容已經(jīng)全部刪除'     old_choice_data = random.choice(old_lists)      # random 模塊的 choice函數(shù)可以隨機獲取傳入的 old_list 的元素     old_lists.remove(old_choice_data)               # 當獲取到這個隨機元素之后,將該元素從 old_lists 中刪除     new_choice_data = '%s_new' % old_choice_data    # 將隨機獲取到的隨機元素通過格式化方式重新賦值,區(qū)別于之前的元素     new_lists.append(new_choice_data)               # 將格式化的新的隨機元素添加至 new_lists 列表      time.sleep(1)if __name__ == '__main__':     strat_time = time.time()      print(''old_lists'初始長度為:{}'.format(len(old_lists)))	# 獲取 old_lists 與 new_lists 最初始的長度     print(''new_lists'初始長度為:{}'.format(len(new_lists)))     thread_list = []        # 定義一個空的 thread_list 對象,用以下方添加每個線程      for i in range(len(old_lists)):         thread_work = threading.Thread(target=work)     # 定義一個線程實例化對象執(zhí)行 work 函數(shù),因為 work 函數(shù)沒有參數(shù)所以不用傳 args         thread_list.append(thread_work)                 # 將 thread_work 添加進 thread_list         thread_work.start()                             # 啟動每一個線程      for t in thread_list:   # 通過for循環(huán)將每一個線程進行阻塞         t.join()      if len(old_lists) ==0:         print(''old_lists' 當前為:{}'.format(None), '當前長度為:{}'.format(len(old_lists)))     else:         print((''old_lists' 當前為:{}'.format(old_lists)))      if not len(new_lists) == 0:         print(''new_lists' 當前長度為:{}'.format(len(new_lists)))         print(''new_lists' 當前的值為:{}'.format(new_lists))     else:         print(''new_lists' 當前為:{}'.format(None))      end_time = time.time()     print('運行結束,累計耗時:{} 秒'.format(end_time - strat_time))

運行結果如下:


Python線程的創(chuàng)建與常用方法(實例詳解)

從運行的結果來看,我們初始的單線程任務耗時為 7秒,在使用多線程之后,僅耗時 1秒就完成了,大大的提高了我們的運行效率。


線程的問題

通過上面的練習,我們發(fā)現(xiàn)線程的使用方法幾乎與進程是一模一樣的。它們都可以互不干擾的執(zhí)行程序,也可以使得主線程的程序不需要等待子線程的任務完成之后再去執(zhí)行。只不過剛剛的演示案例中我們使用了 join() 函數(shù)進行了阻塞,這里可以吧 join() 去掉,看看執(zhí)行效果。

與進程一樣,線程也存在著一定的問題。

  • 線程執(zhí)行的函數(shù),也同樣是無法獲取返回值的。
  • 當多個線程同時修改文件一樣會造成被修改文件的數(shù)據(jù)錯亂的錯誤(因為都是并發(fā)去操作一個文件,特別是在處理交易場景的時候,需要尤為注意)。

關于這些線程中存在的問題同樣是可以解決的,在下一章節(jié)的 線程池與全局鎖 我們會有詳細的介紹。

推薦學習:python視頻教程

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
午夜免费高清视频| 无码人妻少妇伦在线电影| 午夜xxxxx| 在线观看18视频网站| 黄色一级视频在线播放| 国产男女激情视频| 26uuu成人| 久久久久久久久久久99| 免费黄色福利视频| 久久久精品视频国产| 国产美女主播在线| 亚洲天堂网一区| 日韩成人午夜影院| 激情六月丁香婷婷| 艳母动漫在线免费观看| 欧美在线一区视频| 天天干天天色天天干| 日本成人在线不卡| 久久久久久久片| 91大学生片黄在线观看| 成年人小视频网站| 中国老女人av| 日韩精品一区二区三区不卡| 国产精品无码乱伦| 国产1区2区在线| av久久久久久| 99热一区二区| 免费看一级大黄情大片| 欧美爱爱视频网站| 国产三级日本三级在线播放| 水蜜桃在线免费观看| 美女一区二区三区视频| 成年人深夜视频| 三级av免费观看| avav在线看| a天堂资源在线观看| 五月婷婷之婷婷| 国产综合av在线| 亚洲欧美一区二区三区不卡| 免费男同深夜夜行网站| 日本欧美视频在线观看| 国产91av视频在线观看| www.欧美日本| 成人中文字幕在线播放| 国产激情片在线观看| 亚洲精品性视频| 日韩精品免费播放| 国产精品无码av在线播放| 水蜜桃在线免费观看| 亚洲一区二区在线视频观看| 妺妺窝人体色www在线观看| 国产精品12345| 嫩草影院中文字幕| 国产三级中文字幕| 色噜噜狠狠一区二区| 亚洲性生活网站| 无码人妻h动漫| 成年人午夜免费视频| 日本精品久久久久久久久久| 亚洲欧美一二三| 久久免费视频2| 国内av一区二区| 小明看看成人免费视频| 天天色综合天天色| 婷婷激情四射五月天| 99免费视频观看| 超碰影院在线观看| 青青草av网站| 五月天亚洲视频| the porn av| 五月天婷婷亚洲| 手机免费看av网站| 91亚洲一区二区| 日本高清xxxx| 国产一区 在线播放| 中文字幕日韩精品无码内射| 麻豆映画在线观看| 久久精品xxx| 免费一级淫片aaa片毛片a级| 免费一级淫片aaa片毛片a级| 无码中文字幕色专区| 91好吊色国产欧美日韩在线| 免费无码国产v片在线观看| 国产麻花豆剧传媒精品mv在线| 成人在线看视频| 无码日韩人妻精品久久蜜桃| 国产色视频在线播放| 日本高清免费观看| 国产激情片在线观看| 国产精品国产对白熟妇| 免费观看精品视频| 国产成人精品视频ⅴa片软件竹菊| 成人中文字幕av| 中文字幕22页| 久久国产精品免费观看| 国产www免费| 精品免费国产一区二区| 在线观看国产一级片| 特级黄色录像片| 国产欧美日韩小视频| 久久久久久久久久久久久久国产| 国产福利影院在线观看| 一本—道久久a久久精品蜜桃| 久久久久福利视频| 91精品91久久久中77777老牛| 一区二区三区网址| 一本色道久久88亚洲精品综合| 91成人在线观看喷潮教学| 天堂中文视频在线| 国产一区一区三区| 午夜精品久久久久久久无码 | 国产极品在线视频| 高清一区二区视频| 4444在线观看| 国产自偷自偷免费一区| 亚洲免费av网| 狠狠爱免费视频| 只有这里有精品| 亚洲人成色77777| 国产日本欧美在线| 女人扒开屁股爽桶30分钟| 亚洲图色中文字幕| 久久久999免费视频| 成人av毛片在线观看| 成熟了的熟妇毛茸茸| 国产精品探花在线播放| 成年人视频网站免费观看| 日韩视频在线观看一区二区三区| 18岁网站在线观看| 日韩不卡一二区| 日本特黄a级片| 欧美日韩福利在线| 亚洲无在线观看| 国产一区二区三区精彩视频| 中文字幕一区二区三区四区五区人| 亚洲午夜精品久久久久久人妖| 波多野结衣在线免费观看| 波多野结衣家庭教师视频| 福利在线小视频| 看看黄色一级片| 精品国产成人av在线免| 国产一区二区四区| 四虎1515hh.com| 尤蜜粉嫩av国产一区二区三区| 日本中文字幕亚洲| 国产免费色视频| 国产视频1区2区3区| 国产肥臀一区二区福利视频| 欧美交换配乱吟粗大25p| 亚洲涩涩在线观看| 男女男精品视频站| 116极品美女午夜一级| 黄色激情在线视频| 在线视频日韩欧美| 国产一二三区av| 好男人www社区| 国产裸体舞一区二区三区| 青草视频在线观看视频| 欧美h视频在线观看| 色婷婷一区二区三区av免费看| 熟女人妇 成熟妇女系列视频| 久久久久久久久久久99| 天堂8在线天堂资源bt| 麻豆一区二区三区在线观看| 色网站在线视频| 一本一道久久a久久综合蜜桃| 北条麻妃av高潮尖叫在线观看| 男人揉女人奶房视频60分 | 91视频 -- 69xx| 日韩视频免费播放| 99久久久精品视频| 国产夫妻自拍一区| 国产精品第157页| 国产精品69久久久| 每日在线观看av| 97干在线视频| 久草视频国产在线| 91成人在线观看喷潮教学| 亚洲国产成人精品无码区99| av日韩一区二区三区| 国产精品又粗又长| 国产二区视频在线播放| 久久美女福利视频| 成人精品小视频| 日韩一区二区三区不卡视频| 欧美一级特黄a| 欧美成人福利在线观看| 欧美视频国产视频| 免费观看黄色大片| 91视频 - 88av| 日韩a级在线观看| 北条麻妃在线观看| 高清一区在线观看| 黄色小视频免费网站| 性鲍视频在线观看| 欧美久久久久久久久久久久久久| av在线观看地址| www黄色在线| www激情五月| www插插插无码免费视频网站|