python 多線程中子線程和主線程相互通信方法
需求:主線程開啟了多個(gè)線程去干活,每個(gè)線程需要完成的時(shí)間不同,但是在干完活以后都要通知給主線程
下面上代碼:
#!/usr/bin/python # coding:utf8 ''' 多線程和queue配合使用,實(shí)現(xiàn)子線程和主線程相互通信的例子 ''' import threading __author__ = "Kenny.Li" import Queue import time import random q = Queue.Queue() class MyThread(threading.Thread): def __init__(self, q, t, j): super(MyThread, self).__init__() self.q = q self.t = t self.j = j def run(self): time.sleep(self.j) self.q.put(u"我是第%d個(gè)線程,我睡眠了%d秒,當(dāng)前時(shí)間是%s" % (self.t, self.j, time.ctime())) count = 0 threads = [] for i in xrange(15): j = random.randint(1, 8) threads.append(MyThread(q, i, j)) for mt in threads: mt.start() print "start time: ", time.ctime() while True: if not q.empty(): print q.get() count += 1 if count == 15: break
下面對(duì)以上代碼進(jìn)行解釋:
1,q 是實(shí)例化了的隊(duì)列對(duì)象,具有FIFO性。首先定義一個(gè)自己的線程類,重寫run方法。注意在構(gòu)造方法中傳入q隊(duì)列,用于接收每個(gè)線程需要返回的消息
2,第26行,通過q.put()方法,將每個(gè)子線程要返回給主線程的消息,存到隊(duì)列中。
3,從第31行開始,生成15個(gè)子線程,加入到線程組里,每個(gè)線程隨機(jī)睡眠1-8秒(模擬每個(gè)線程干活時(shí)間的長(zhǎng)短不同)
4,第34-35行,循環(huán)開啟所有子線程
5,第36行,打印開始時(shí)間
6,通過一個(gè)while循環(huán),當(dāng)q隊(duì)列中不為空時(shí),通過q.get()方法,循環(huán)讀取隊(duì)列q中的消息,每次計(jì)數(shù)器加一,當(dāng)計(jì)數(shù)器到15時(shí),證明所有子線程的消息都已經(jīng)拿到了,此時(shí)循環(huán)停止。
以上這篇python 多線程中子線程和主線程相互通信方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用asyncio包實(shí)現(xiàn)異步編程方式
這篇文章主要介紹了Python使用asyncio包實(shí)現(xiàn)異步編程方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
pytorch在fintune時(shí)將sequential中的層輸出方法,以vgg為例
今天小編就為大家分享一篇pytorch在fintune時(shí)將sequential中的層輸出方法,以vgg為例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-08-08
Python?Melt函數(shù)將寬格式的數(shù)據(jù)表轉(zhuǎn)換為長(zhǎng)格式
在數(shù)據(jù)處理和清洗中,melt函數(shù)是Pandas庫(kù)中一個(gè)強(qiáng)大而靈活的工具,它的主要功能是將寬格式的數(shù)據(jù)表轉(zhuǎn)換為長(zhǎng)格式,從而更方便進(jìn)行分析和可視化,本文將深入探討melt函數(shù)的用法、參數(shù)解析以及實(shí)際應(yīng)用場(chǎng)景2023-12-12
詳細(xì)分析Python collections工具庫(kù)
這篇文章主要介紹了詳解Python collections工具庫(kù)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
PyQt5 實(shí)現(xiàn)給窗口設(shè)置背景圖片的方法
今天小編就為大家分享一篇PyQt5 實(shí)現(xiàn)給窗口設(shè)置背景圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-06-06
Pandas groupby apply agg 的區(qū)別 運(yùn)行自定義函數(shù)說明
這篇文章主要介紹了Pandas groupby apply agg 的區(qū)別 運(yùn)行自定義函數(shù)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2021-03-03

