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实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
Mar 23 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
使用numba对Python运算加速的方法
Oct 15 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
python3 删除所有自定义变量的操作
Apr 08 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中使用Oracle数据库(4)
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/11/17 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
javascript中的self和this用法小结
2014/02/08 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
Python全排列操作实例分析
2018/07/24 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
公关活动策划方案
2014/05/25 职场文书
公司经理任命书
2014/06/05 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
2015年重阳节主持词
2015/07/04 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书