日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 线程超时设置_python 条件变量Condition(36)

發(fā)布時(shí)間:2023/12/10 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 线程超时设置_python 条件变量Condition(36) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章首發(fā)微信公眾號(hào),微信搜索:猿說python

對(duì)于線程與線程之間的交互我們?cè)谇懊娴奈恼乱呀?jīng)介紹了 python 互斥鎖Lock / python事件Event , 今天繼續(xù)介紹一種線程交互方式 – 線程條件變量Condition.

一.線程條件變量Condition相關(guān)函數(shù)介紹

acquire() — 線程鎖,注意線程條件變量Condition中的所有相關(guān)函數(shù)使用必須在acquire() /release() 內(nèi)部操作;

release() — 釋放鎖,注意線程條件變量Condition中的所有相關(guān)函數(shù)使用必須在acquire() /release() 內(nèi)部操作;

wait(timeout) — 線程掛起(阻塞狀態(tài)),直到收到一個(gè)notify通知或者超時(shí)才會(huì)被喚醒繼續(xù)運(yùn)行(超時(shí)參數(shù)默認(rèn)不設(shè)置,可選填,類型是浮點(diǎn)數(shù),單位是秒)。wait()必須在已獲得Lock前提下才能調(diào)用,否則會(huì)觸發(fā)RuntimeError;

notify(n=1) — 通知其他線程,那些掛起的線程接到這個(gè)通知之后會(huì)開始運(yùn)行,缺省參數(shù),默認(rèn)是通知一個(gè)正等待通知的線程,最多則喚醒n個(gè)等待的線程。notify()必須在已獲得Lock前提下才能調(diào)用,否則會(huì)觸發(fā)RuntimeError,notify()不會(huì)主動(dòng)釋放Lock;

notifyAll() — 如果wait狀態(tài)線程比較多,notifyAll的作用就是通知所有線程;

二.線程條件變量Condition原理

在前面的文章已經(jīng)介紹過互斥鎖,主要作用是并行訪問共享資源時(shí),保護(hù)共享資源,防止出現(xiàn)臟數(shù)據(jù)。python 條件變量Condition也需要關(guān)聯(lián)互斥鎖,同時(shí)Condition自身提供了wait/notify/notifyAll方法,用于阻塞/通知其他并行線程,可以訪問共享資源了??梢赃@么理解,Condition提供了一種多線程通信機(jī)制,假如線程1需要數(shù)據(jù),那么線程1就阻塞等待,這時(shí)線程2就去制造數(shù)據(jù),線程2制造好數(shù)據(jù)后,通知線程1可以去取數(shù)據(jù)了,然后線程1去獲取數(shù)據(jù)。

三.線程條件變量Condition使用

案例一:成語接龍

# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個(gè)人博客地址): shuopython.com @WeChat Official Account(微信公眾號(hào)):猿說python @Github:www.github.com@File:python_.py @Time:2019/10/21 21:25@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累! """# 導(dǎo)入線程模塊 import threading# 創(chuàng)建條件變量condition con = threading.Condition()def thread_one(name):# 條件變量condition 線程上鎖con.acquire()print("{}:成語接龍準(zhǔn)備好了嗎".format(name))# 喚醒正在等待(wait)的線程con.notify()# 等待對(duì)方回應(yīng)消息,使用wait阻塞線程,等待對(duì)方通過notify喚醒本線程con.wait()print("{}:一干二凈".format(name))# 喚醒對(duì)方con.notify()# 等待消息答應(yīng)con.wait()print("{}:一天就知道看抖音美女,給你來個(gè)簡單點(diǎn)的,來了:毛手毛腳".format(name))# 喚醒對(duì)方con.notify()# 等待消息答應(yīng)con.wait()print("{}:喲喲喲,不錯(cuò)不錯(cuò)!".format(name))# 喚醒對(duì)方con.notify()# 條件變量condition 線程釋放鎖con.release()def thread_two(name):# 條件變量condition 線程上鎖con.acquire()# wait阻塞狀態(tài),等待其他線程通過notify喚醒本線程con.wait()print("{}:準(zhǔn)備好了~開始吧!".format(name))# 喚醒對(duì)方con.notify()# 等待消息答應(yīng)con.wait()print("{}:凈你妹啊,沒法接...來個(gè)簡單點(diǎn)的...".format(name))# 喚醒對(duì)方con.notify()# 等待消息答應(yīng)con.wait()print("{}:嘿,這個(gè)我知道:腳踏實(shí)地".format(name))# 喚醒對(duì)方con.notify()con.release()if __name__ == "__main__":# 創(chuàng)建并初始化線程t1 = threading.Thread(target=thread_one,args=("A"))t2 = threading.Thread(target=thread_two,args=("B"))# 啟動(dòng)線程 -- 注意線程啟動(dòng)順序,啟動(dòng)順序很重要t2.start()t1.start()# 阻塞主線程,等待子線程結(jié)束t1.join()t2.join()print("程序結(jié)束!")

輸出結(jié)果:

A:成語接龍準(zhǔn)備好了嗎 B:準(zhǔn)備好了~開始吧! A:一干二凈 B:凈你妹啊,沒法接...來個(gè)簡單點(diǎn)的... A:一天就知道看抖音美女,給你來個(gè)簡單點(diǎn)的,來了:毛手毛腳 B:嘿,這個(gè)我知道:腳踏實(shí)地 A:喲喲喲,不錯(cuò)不錯(cuò)! 程序結(jié)束!

案例二:生產(chǎn)者與消費(fèi)者模式,以吃火鍋為例:一盤老肉片有10塊肉,吃完了又重新往鍋里加….

生產(chǎn)者:往鍋里加老肉片,每次加一盤(10塊);

消費(fèi)者:吃煮熟的肉片,沒吃一片,肉片數(shù)量減一,吃完為止;

# 導(dǎo)入線程模塊 import threading import time# 創(chuàng)建條件變量condition con = threading.Condition() meat_num = 0def thread_consumers():# 條件變量condition 線程上鎖con.acquire()# 全局變量聲明關(guān)鍵字 globalglobal meat_nummeat_num = 0# 等待肉片下鍋煮熟con.wait()while True:print("我來一塊肉片...")meat_num -= 1print("剩余肉片數(shù)量:%d"%meat_num)time.sleep(0.5)if meat_num == 0:# 肉片吃光了,通知老板添加肉片print("老板,再來一份老肉片...")con.notify()# 肉片吃光了,等待肉片con.wait()# 條件變量condition 線程釋放鎖con.release()def thread_producer():# 條件變量condition 線程上鎖con.acquire()# 全局變量聲明關(guān)鍵字 globalglobal meat_num# 肉片熟了,可以開始吃了meat_num = 10print("肉片熟了,可以開始吃了...")con.notify()while True:# 阻塞函數(shù),等待肉片吃完的通知con.wait()meat_num = 10# 添加肉片完成,可以繼續(xù)開吃print("添加肉片成功!當(dāng)前肉片數(shù)量:%d"%meat_num)time.sleep(1)con.notify()con.release()if __name__ == "__main__":# 創(chuàng)建并初始化線程t1 = threading.Thread(target=thread_producer)t2 = threading.Thread(target=thread_consumers)# 啟動(dòng)線程 -- 注意線程啟動(dòng)順序,啟動(dòng)順序很重要t2.start()t1.start()# 阻塞主線程,等待子線程結(jié)束t1.join()t2.join()print("程序結(jié)束!")

輸出結(jié)果:

肉片熟了,可以開始吃了... 我來一塊肉片... 剩余肉片數(shù)量:9 我來一塊肉片... 剩余肉片數(shù)量:8 我來一塊肉片... 剩余肉片數(shù)量:7 我來一塊肉片... 剩余肉片數(shù)量:6 我來一塊肉片... 剩余肉片數(shù)量:5 我來一塊肉片... 剩余肉片數(shù)量:4 我來一塊肉片... 剩余肉片數(shù)量:3 我來一塊肉片... 剩余肉片數(shù)量:2 我來一塊肉片... 剩余肉片數(shù)量:1 我來一塊肉片... 剩余肉片數(shù)量:0 老板,再來一份老肉片... 添加肉片成功!當(dāng)前肉片數(shù)量:10 我來一塊肉片... 剩余肉片數(shù)量:9 我來一塊肉片... 剩余肉片數(shù)量:8 我來一塊肉片... 剩余肉片數(shù)量:7 .............

注意:

1.全局變量要聲明關(guān)鍵字 global;

2.注意線程的啟動(dòng)順序,這個(gè)很重要;

四.重點(diǎn)總結(jié)

注意線程互斥鎖Lock/線程事件Event/線程條件變量Condition三者的區(qū)別,場(chǎng)景不同,使用方式也不同,前兩者一般可以作為簡單的線程交互,線程條件變量Condition可以用于比較復(fù)雜的線程交互!

猜你喜歡:

1.python線程創(chuàng)建和參數(shù)傳遞

2.python線程互斥鎖Lock

3.python線程事件Event

4.python return邏輯判斷表達(dá)式

轉(zhuǎn)載請(qǐng)注明:猿說Python ? python條件變量Condition

想了解更多python內(nèi)容請(qǐng)直接搜索微信公眾號(hào):猿說python

Python教程 - 猿說Python?www.shuopython.com

本人也還在學(xué)習(xí)python中,博客會(huì)持續(xù)更新ing,有興趣的小伙伴關(guān)注走一波,推薦瀏覽個(gè)人博客網(wǎng)站:猿說python,文章采用樹狀分類,結(jié)構(gòu)目錄清晰一點(diǎn),文章內(nèi)容有問題的話歡迎給出建議或者直接留言.

總結(jié)

以上是生活随笔為你收集整理的python 线程超时设置_python 条件变量Condition(36)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美黄色大片网站 | 国产精品视频全国免费观看 | 国产粉嫩一区二区三区 | 神马午夜精品 | 一级片一区二区三区 | 色老头在线观看 | 中国挤奶哺乳午夜片 | 免费一级黄 | 亚洲午夜激情 | 色七七久久 | 五月天六月色 | 99在线免费观看视频 | 免费一级特黄特色毛片久久看 | 一级a性色生活片久久毛片 爱爱高潮视频 | 中国av免费| 天天夜夜人人 | 欧美日韩1区 | 黑人高潮一区二区三区在线看 | 日本亲与子乱xxx | 免费观看色| 国产亚洲久久 | 激情瑟瑟| 中文在线a在线 | 国产精品视频亚洲 | 午夜视频在线免费观看 | 日韩欧美中文字幕在线播放 | 日韩熟妇一区二区三区 | 蜜桃精品视频 | 久久久久成人精品免费播放动漫 | 久久四虎 | 91网址在线| 国产一区二区三区在线播放无 | 人人做人人爽 | 成人午夜视频一区二区播放 | 在线播放成人av | 成人免费在线观看网站 | 少妇搡bbbb搡bbb搡打电话 | 成人免费黄色小视频 | 国产激情一区二区三区四区 | 粗大黑人巨茎大战欧美成人 | 国产精品不卡 | 国产精品爽爽 | 日本三级播放 | 亚洲丝袜色图 | 一级黄色特级片 | 麻豆专区 | 免费成人黄 | 啄木乌欧美一区二区三区 | 国产探花在线精品一区二区 | 日韩中文第一页 | 精品免费一区 | 国产精品乱码一区二区 | 国产高清一区 | 天堂av网在线 | 亚洲第5页 | 色一区二区三区 | 大奶av | 花样视频污 | 亚洲人毛茸茸 | 色九月婷婷 | 午夜视频在线网站 | 亚洲女同一区 | av观看国产 | 中国在线观看免费视频 | 大地资源中文在线观看免费版 | 日韩av在线网 | 久草手机在线观看 | 欧美性猛交ⅹ乱大交3 | 亚洲精品黄 | 日日夜夜撸撸 | 国产免费观看久久黄av片 | 亚洲一区二区三区四区视频 | 亚洲一区二区久久 | 久久久午夜电影 | 四虎影院一区 | 精品一区二区三区在线免费观看 | 成人免费淫片aa视频免费 | 人人草网站 | 欧美另类xxxx | 青青青视频在线播放 | 中文字幕一区二区三区四区欧美 | 国产精品久久色 | 国产精品久久久久久久av | 一本大道久久a久久精二百 琪琪色在线视频 | 中文字幕一区二区三区在线不卡 | 免费日韩视频 | 97人妻人人澡人人爽人人精品 | 99久久精品国产成人一区二区 | xxx色| 国产日韩久久久 | 夜夜艹天天干 | 青青草原国产在线 | 欧美老熟妇喷水 | 精品99久久久 | av黄色免费 | 日韩欧美精品一区二区三区 | 色乱码一区二区三区网站 | 精品国产福利 | 永久免费看片在线播放 |