这篇文章主要介绍python多线程中子线程和主线程如何相互通信,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
需求:主线程开启了多个线程去干活,每个线程需要完成的时间不同,但是在干完活以后都要通知给主线程
下面上代码:
#!/usr/bin/python
# coding:utf8
'''
多线程和queue配合使用,实现子线程和主线程相互通信的例子
'''
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方法。注意在构造方法中传入q队列,用于接收每个线程需要返回的消息
2,第26行,通过q.put()方法,将每个子线程要返回给主线程的消息,存到队列中。
3,从第31行开始,生成15个子线程,加入到线程组里,每个线程随机睡眠1-8秒(模拟每个线程干活时间的长短不同)
4,第34-35行,循环开启所有子线程
5,第36行,打印开始时间
6,通过一个while循环,当q队列中不为空时,通过q.get()方法,循环读取队列q中的消息,每次计数器加一,当计数器到15时,证明所有子线程的消息都已经拿到了,此时循环停止。
以上是“python多线程中子线程和主线程如何相互通信”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注天达云行业资讯频道!