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


Posted in Python onNovember 09, 2018

需求:主线程开启了多个线程去干活,每个线程需要完成的时间不同,但是在干完活以后都要通知给主线程

下面上代码:

#!/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解析网页源代码中的115网盘链接实例
Sep 30 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
详解python中__name__的意义以及作用
Aug 07 Python
python加载自定义词典实例
Dec 06 Python
Python实现井字棋小游戏
Mar 09 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
OpenCV-Python实现轮廓的特征值
Jun 09 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 #Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 #Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 #Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 #Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 #Python
浅谈python写入大量文件的问题
Nov 09 #Python
启动Atom并运行python文件的步骤
Nov 09 #Python
You might like
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
删除重复数据的算法
2006/11/23 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
详解vue v-model
2020/08/31 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
python编程开发之日期操作实例分析
2015/11/13 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
学校经典推荐信
2013/10/30 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
政协工作总结2015
2015/05/20 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python
python3操作redis实现List列表实例
2021/08/04 Python
欧元符号 €
2022/02/17 杂记
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android