python中Event實現(xiàn)線程間同步介紹
前言:
Event在python線程間同步是一種常用的方法,本博客以生產(chǎn)者線程和工作者線程為例說明Event在線程間進行10次同步的應(yīng)用。
import threading from threading import Event, Thread import time import random from time import sleep ? pevent = Event() #默認是沒有事件的 pevent.clear() ? cevent = Event()? cevent.clear() ? runtimes = 10 mutex_lock = threading.Lock() ? ? class ProducerThread (threading.Thread): ? ? def __init__(self, name, runflag): ? ? ? ? threading.Thread.__init__(self) ? ? ? ? self.name = name ? ? ? ? self.runflag = runflag ? ? ? ? self.continueflag = Event() ? ? ? ? self.continueflag.set() ? ? ? ?? ? ? def run(self): ? ? ? ? global runtimes ? ? ? ? ? sleep(1) ? ? ? ? print ("開始線程:" + self.name) ? ? ? ? while self.continueflag.isSet(): ? ? ? ? ? ? print("wait consumer ...") ? ? ? ? ? ? if runtimes == 0: ? ? ? ? ? ? ? ? self.continueflag.clear() ? ? ? ? ? ? ? ? break ? ? ? ? ? ? pevent.wait() ? ? ? ? ? ? print("come an consumer ...") ? ? ? ? ? ? mutex_lock.acquire() ? ? ? ? ? ? runtimes = runtimes - 1 ? ? ? ? ? ? mutex_lock.release() ? ? ? ? ? ? pevent.clear() ? ? ? ? ? ? sleep(1) ? ? ? ? ? ? cevent.set() ? ? ? ? print ("退出線程:" + self.name) ? ? ? ? self.runflag.set() ? class ConsumerThread (threading.Thread): ? ? def __init__(self,name, runflag): ? ? ? ? threading.Thread.__init__(self) ? ? ? ? self.name = name ? ? ? ? self.runflag = runflag ? ? ? ? self.continueflag = Event() ? ? ? ? self.continueflag.set() ? ? ? ?? ? ? def run(self): ? ? ? ? global runtimes? ? ? ? ? print ("開始線程:" + self.name) ? ? ? ? while self.continueflag.isSet(): ? ? ? ? ? ? if 0 == runtimes: ? ? ? ? ? ? ? ? self.continueflag.clear()? ? ? ? ? ? ? ? ? pevent.set() ? ? ? ? ? ? ? ? break ? ? ? ? ? ? print("I want to consum ... ", runtimes) ? ? ? ? ? ? pevent.set() #通知生產(chǎn)者要消費 ? ? ? ? ? ? cevent.wait() ? ? ? ? ? ? cevent.clear() ? ? ? ? ? ? sleep(1) ? ? ? ? print ("退出線程:" + self.name) ? ? ? ? self.runflag.set() ? def test_pthread(): ? ? runflag = Event()? ? ? pt = ProducerThread("producer", runflag) ? ? ct = ConsumerThread("consumer", runflag) ? ? pt.start() ? ? ct.start() ? ? pt.join() ? ? ct.join() ? ? runflag.wait() ? if __name__ == '__main__': ? ? print('===============begin=================') ? ? test_pthread() ? ? print('===============end=================')
運行結(jié)果如下:
到此這篇關(guān)于python中Event實現(xiàn)線程間同步介紹的文章就介紹到這了,更多相關(guān)Event線程間同步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python多線程同步Lock、RLock、Semaphore、Event實例
- 分析Python感知線程狀態(tài)的解決方案之Event與信號量
- Python中使用threading.Event協(xié)調(diào)線程的運行詳解
- python基于event實現(xiàn)線程間通信控制
- python Event事件、進程池與線程池、協(xié)程解析
- 詳解Python 多線程 Timer定時器/延遲執(zhí)行、Event事件
- 詳解python多線程、鎖、event事件機制的簡單使用
- python多線程之事件Event的使用詳解
- Python多線程編程(八):使用Event實現(xiàn)線程間通信
相關(guān)文章
用python按照圖像灰度值統(tǒng)計并篩選圖片的操作(PIL,shutil,os)
這篇文章主要介紹了用python按照圖像灰度值統(tǒng)計并篩選圖片的操作(PIL,shutil,os),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python+pyhyper實現(xiàn)識別圖片中的車牌號思路詳解
最近領(lǐng)導(dǎo)給布置了一個基于圖片識別車牌號的工具開發(fā)任務(wù),然后就去研究實現(xiàn)邏輯,自己根據(jù)opencv寫了一個小demo,發(fā)現(xiàn)不僅速度慢而且成功率極低。然后,就找到了Hyperlpr開源項目,這篇文章主要介紹了python+pyhyper實現(xiàn)識別圖片中的車牌號,需要的朋友可以參考下2022-12-12報錯No?module?named?numpy問題的解決辦法
之前安裝了Python,后來因為練習(xí)使用Python寫科學(xué)計算的東西,又安裝了Anaconda,但是安裝Anaconda之后又出現(xiàn)了一個問題,下面這篇文章主要給大家介紹了關(guān)于報錯No?module?named?numpy問題的解決辦法,需要的朋友可以參考下2022-08-08