python 多線程中子線程和主線程相互通信方法
需求:主線程開啟了多個線程去干活,每個線程需要完成的時間不同,但是在干完活以后都要通知給主線程
下面上代碼:
#!/usr/bin/python # coding:utf8 ''' 多線程和queue配合使用,實現(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個線程,我睡眠了%d秒,當前時間是%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
下面對以上代碼進行解釋:
1,q 是實例化了的隊列對象,具有FIFO性。首先定義一個自己的線程類,重寫run方法。注意在構(gòu)造方法中傳入q隊列,用于接收每個線程需要返回的消息
2,第26行,通過q.put()方法,將每個子線程要返回給主線程的消息,存到隊列中。
3,從第31行開始,生成15個子線程,加入到線程組里,每個線程隨機睡眠1-8秒(模擬每個線程干活時間的長短不同)
4,第34-35行,循環(huán)開啟所有子線程
5,第36行,打印開始時間
6,通過一個while循環(huán),當q隊列中不為空時,通過q.get()方法,循環(huán)讀取隊列q中的消息,每次計數(shù)器加一,當計數(shù)器到15時,證明所有子線程的消息都已經(jīng)拿到了,此時循環(huán)停止。
以上這篇python 多線程中子線程和主線程相互通信方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
OpenCV結(jié)合selenium實現(xiàn)滑塊驗證碼
本文主要介紹了OpenCV結(jié)合selenium實現(xiàn)滑塊驗證碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08python3實現(xiàn)將json對象存入Redis以及數(shù)據(jù)的導入導出
這篇文章主要介紹了python3實現(xiàn)將json對象存入Redis以及數(shù)據(jù)的導入導出,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Pygame庫200行代碼實現(xiàn)簡易飛機大戰(zhàn)
本文主要介紹了Pygame庫200行代碼實現(xiàn)簡易飛機大戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12利用OpenCV+Tensorflow實現(xiàn)的手勢識別
這幾天沒事,想著再學點一些視覺識別方向的東西,因為之前做了驗證碼識別,有了機器學習的信心,因此這次打算做個手勢識別,下面這篇文章主要給大家介紹了關(guān)于利用OpenCV+Tensorflow實現(xiàn)的手勢識別的相關(guān)資料,需要的朋友可以參考下2022-11-11