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

首頁(yè) > 編程 > Python > 正文

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

2020-02-23 00:45:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Python3,開(kāi)一個(gè)線(xiàn)程,間隔1秒把一個(gè)遞增的數(shù)字寫(xiě)入隊(duì)列,再開(kāi)一個(gè)線(xiàn)程,從隊(duì)列中取出數(shù)字并打印到終端

#! /usr/bin/env python3import timeimport threadingimport queue# 一個(gè)線(xiàn)程,間隔一定的時(shí)間,把一個(gè)遞增的數(shù)字寫(xiě)入隊(duì)列# 生產(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秒# 一個(gè)線(xiàn)程,從隊(duì)列取出數(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)隊(duì)列為空時(shí),會(huì)阻塞,直到有數(shù)據(jù)      print(num)def main():  work_queue = queue.Queue()  producer = Producer(work_queue)  producer.daemon = True # 當(dāng)主線(xiàn)程退出時(shí)子線(xiàn)程也退出  producer.start()  printer = Printer(work_queue)  printer.daemon = True # 當(dāng)主線(xiàn)程退出時(shí)子線(xiàn)程也退出  printer.start()  work_queue.join() # 主線(xiàn)程會(huì)停在這里,直到所有數(shù)字被get(),并且task_done(),因?yàn)闆](méi)有調(diào)用task_done(),所在這里會(huì)一直阻塞,直到用戶(hù)按^Cif __name__ == '__main__':  main()

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蚌埠市| 和龙市| 定西市| 大港区| 惠来县| 荆门市| 隆子县| 彰武县| 博客| 祁东县| 马公市| 宁海县| 日土县| 工布江达县| 精河县| 蕉岭县| 高清| 三明市| 大田县| 天等县| 剑川县| 庄河市| 西青区| 民丰县| 江源县| 宁阳县| 鸡泽县| 辽源市| 西藏| 周至县| 河池市| 白银市| 铜鼓县| 盐亭县| 德阳市| 邓州市| 孟津县| 营口市| 昌平区| 桓台县| 黄梅县|