日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python多線程和隊(duì)列操作實(shí)例

系統(tǒng) 2004 0

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

復(fù)制代碼 代碼如下:

#! /usr/bin/env python3

import time
import threading
import queue

# 一個(gè)線程,間隔一定的時(shí)間,把一個(gè)遞增的數(shù)字寫入隊(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è)線程,從隊(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)主線程退出時(shí)子線程也退出
??? producer.start()

??? printer = Printer(work_queue)
??? printer.daemon = True # 當(dāng)主線程退出時(shí)子線程也退出
??? printer.start()

??? work_queue.join() # 主線程會(huì)停在這里,直到所有數(shù)字被get(),并且task_done(),因?yàn)闆]有調(diào)用task_done(),所在這里會(huì)一直阻塞,直到用戶按^C

if __name__ == '__main__':
??? main()


queue是線程安全的,從多個(gè)線程訪問(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)下去。
https://docs.python.org/3/library/queue.html


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 宝丰县| 布尔津县| 铜鼓县| 施甸县| 临澧县| 玉门市| 黔西| 宝鸡市| 扎囊县| 甘谷县| 陆河县| 永吉县| 马边| 双牌县| 江城| 永和县| 蓬安县| 溧阳市| 富平县| 潜山县| 德昌县| 乌兰浩特市| 通海县| 锦屏县| 汾阳市| 壶关县| 义马市| 兰州市| 高阳县| 林甸县| 铜陵市| 莱芜市| 谷城县| 唐河县| 建平县| 黔南| 钟祥市| 隆林| 绵竹市| 揭西县| 金山区|