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接收多播数据的代码
Mar 01 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
python测试mysql写入性能完整实例
Jan 18 Python
深入浅析Python的类
Jun 22 Python
对python遍历文件夹中的所有jpg文件的实例详解
Dec 08 Python
python七夕浪漫表白源码
Apr 05 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Django choices下拉列表绑定实例
Mar 13 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
php抓取页面与代码解析 推荐
2010/07/23 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
使用Python对Excel进行读写操作
2017/03/30 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
台湾最大网路书店:博客来
2018/03/18 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
创业计划书如何编写
2014/02/06 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
实习生岗位职责
2014/04/12 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
外国人来华邀请函
2015/01/31 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers