网络编程
位置:首页>> 网络编程>> Python编程>> python 多线程中子线程和主线程相互通信方法

python 多线程中子线程和主线程相互通信方法

作者:yifei325325  发布时间:2021-05-13 03:56:44 

标签: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时,证明所有子线程的消息都已经拿到了,此时循环停止。

来源:https://blog.csdn.net/yifei325325/article/details/73497851

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com