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

yipeiwu_com6年前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 多线程中子线程和主线程相互通信方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python机器学习算法之k均值聚类(k-means)

Python机器学习算法之k均值聚类(k-means)

一开始的目的是学习十大挖掘算法(机器学习算法),并用编码实现一遍,但越往后学习,越往后实现编码,越发现自己的编码水平低下,学习能力低。这一个k-means算法用Python实现竟用了三天...

解决Django生产环境无法加载静态文件问题的解决

起步 线上部署时因设置了 settings.DEBUG = False 会导致静态文件都是 404 的情况。主要原因是应为关闭DEBUG模式后,Django 便不提供静态文件服务了。...

python TKinter获取文本框内容的方法

如下所示: #coding:utf-8 import urllib,urllib2 import Tkinter #导入TKinter模块 ytm=Tkinter.Tk() #创...

Python实现发送与接收邮件的方法详解

Python实现发送与接收邮件的方法详解

本文实例讲述了Python实现发送与接收邮件的方法。分享给大家供大家参考,具体如下: 一、发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tk...

python 删除大文件中的某一行(最有效率的方法)

用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件。 但如果要处理一个很大的文本,比如GB级别的文本时,这种方法不仅需要占用...