在python項目開發(fā)中,線程thread使用是比較常見的,在前面的文章中我們介紹了?python線程的創(chuàng)建??以及?線程互斥鎖?,今天還要額外介紹一個與線程相關(guān)的內(nèi)容 –?事件Event。
網(wǎng)站制作、網(wǎng)站建設(shè)的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗。創(chuàng)新互聯(lián)多年互聯(lián)網(wǎng)經(jīng)驗,見的多,溝通容易、能幫助客戶提出的運營建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇創(chuàng)新互聯(lián),不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價值服務(wù)。?
set()?— 全局內(nèi)置標志Flag,將標志Flag 設(shè)置為 True,通知在等待狀態(tài)(wait)的線程恢復(fù)運行;
isSet()?— 獲取標志Flag當前狀態(tài),返回True 或者 False;
wait()?— 一旦調(diào)用,線程將會處于阻塞狀態(tài),直到等待其他線程調(diào)用set()函數(shù)恢復(fù)運行;
clear()?— 將標志設(shè)置為False;
?
事件event中有一個全局內(nèi)置標志Flag,值為 True 或者False。使用wait()函數(shù)的線程會處于阻塞狀態(tài),此時Flag指為False,直到有其他線程調(diào)用set()函數(shù)讓全局標志Flag置為True,其阻塞的線程立刻恢復(fù)運行,還可以用isSet()函數(shù)檢查當前的Flag狀態(tài).
?
?
假如有這樣一個場景:有10個單身狗,對面100米有10個美女,同時起跑,一人一個,自由選擇,先到先得…..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com @File:python_event.py @Time:2019/10/20 21:25 ? @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """ ? # 導入線程模塊 import threading ? # 創(chuàng)建event事件 eEvent = threading.Event() ? def get_girl_friend(id): ????print("單身狗{}都準備完畢,內(nèi)置Flag狀態(tài):{}.....".format(id,eEvent.isSet())) ????eEvent.wait() ????print("單身狗%d告別單身....."%id) ? ? if __name__ == "__main__": ? ????thread_list = list() ? ????for i in range(1,11): ????????# 創(chuàng)建并初始化線程 ????????t = threading.Thread(target=get_girl_friend,args=(i,)) ????????# 啟動線程 ????????t.start() ????????# 將線程句柄添加list列表中 ????????thread_list.append(t) ? ????# 所有線程準備完畢,將event內(nèi)置Flag設(shè)置為True,恢復(fù)正在阻塞的線程 ????eEvent.set() ? ????# 遍歷列表,阻塞主線程 ????for t in thread_list: ????????# 阻塞主線程,等待所有子線程結(jié)束 ????????t.join() ? ????print("程序結(jié)束!") |
輸出結(jié)果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 單身狗1都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗2都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗3都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗4都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗5都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗6都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗7都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗8都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗9都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗10都準備完畢,內(nèi)置Flag狀態(tài):False..... 單身狗5告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗6告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗7告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗1告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗8告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗10告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗4告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗9告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗3告別單身,內(nèi)置Flag狀態(tài):True..... 單身狗2告別單身,內(nèi)置Flag狀態(tài):True..... 程序結(jié)束! |
?
注意互斥鎖Lock與事件Event區(qū)別,需求不同,使用方式也不同:
互斥鎖Lock主要針對多個線程同時操作同一個數(shù)據(jù),使用互斥鎖可以保證數(shù)據(jù)正常修改或者訪問;
事件Event主要用于喚醒正在阻塞等待狀態(tài)的線程;
?
?
1.python線程創(chuàng)建和參數(shù)傳遞
2.python互斥鎖Lock
3.python列表推導式
4.python字典推導式
?
轉(zhuǎn)載請注明:猿說Python???python 事件Event
網(wǎng)站題目:python線程事件Event(30)-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://jinyejixie.com/article40/djeieo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、移動網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容