国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python3中多線程編程的隊列運(yùn)作示例

2019-11-25 17:43:28
字體:
供稿:網(wǎng)友

Python3,開一個線程,間隔1秒把一個遞增的數(shù)字寫入隊列,再開一個線程,從隊列中取出數(shù)字并打印到終端

#! /usr/bin/env python3import timeimport threadingimport queue# 一個線程,間隔一定的時間,把一個遞增的數(shù)字寫入隊列# 生產(chǎn)者class Producer(threading.Thread):  def __init__(self, work_queue):    super().__init__() # 必須調(diào)用    self.work_queue = work_queue      def run(self):    num = 1    while True:      self.work_queue.put(num)      num = num+1      time.sleep(1) # 暫停1秒# 一個線程,從隊列取出數(shù)字,并顯示到終端class Printer(threading.Thread):  def __init__(self, work_queue):    super().__init__() # 必須調(diào)用    self.work_queue = work_queue  def run(self):    while True:      num = self.work_queue.get() # 當(dāng)隊列為空時,會阻塞,直到有數(shù)據(jù)      print(num)def main():  work_queue = queue.Queue()  producer = Producer(work_queue)  producer.daemon = True # 當(dāng)主線程退出時子線程也退出  producer.start()  printer = Printer(work_queue)  printer.daemon = True # 當(dāng)主線程退出時子線程也退出  printer.start()  work_queue.join() # 主線程會停在這里,直到所有數(shù)字被get(),并且task_done(),因為沒有調(diào)用task_done(),所在這里會一直阻塞,直到用戶按^Cif __name__ == '__main__':  main()

queue是線程安全的,從多個線程訪問時無需加鎖。
如果在work_queue.get()之后調(diào)用work_queue.task_done(),那么在隊列空時work_queue.join()會返回。
這里work_queue.put()是間隔一定時間才往隊列放東西,如果調(diào)用work_queue.task_done(),在數(shù)字1被get()后,隊列空時,join()就返回,程序就結(jié)束了。
也就是程序只打印了1然后就退出了。
所以在這種使用情景下,不能調(diào)用task_done(),程序會一直循環(huán)下去。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桑日县| 马公市| 颍上县| 玛曲县| 岢岚县| 米易县| 镇雄县| 梓潼县| 白银市| 湖口县| 玉环县| 嘉善县| 太白县| 道孚县| 安多县| 彰化县| 黔南| 巴彦县| 兴文县| 岐山县| 丰原市| 东安县| 遂昌县| 英超| 镇远县| 康乐县| 博罗县| 凤山县| 汪清县| 鲁甸县| 上杭县| 多伦县| 凤山县| 昌黎县| 建瓯市| 庄浪县| 洛宁县| 秦安县| 建水县| 交口县| 西畴县|