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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
Django rest framework实现分页的示例
May 24 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 Python
利用Python实现模拟登录知乎
May 25 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函数http_build_query使用详解
2014/08/20 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
python为什么要安装到c盘
2020/07/20 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Python 里最强的地图绘制神器
2021/03/01 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
事业单位考核材料
2014/05/21 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python