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实现socket客户端和服务端简单示例
Feb 24 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
Python读取sqlite数据库文件的方法分析
Aug 07 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
Oct 07 Python
Python多继承顺序实例分析
May 26 Python
python实现websocket的客户端压力测试
Jun 25 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
python获取array中指定元素的示例
Nov 26 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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
什么是MVC,好东西啊
2007/05/03 PHP
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
PHP加密技术的简单实现
2016/09/04 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
css图片自适应大小
2007/11/28 Javascript
javascript 必知必会之closure
2009/09/21 Javascript
学习ExtJS Window常用方法
2009/10/07 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
Vue面试题及Vue知识点整理
2018/10/07 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
python从入门到精通(DAY 3)
2015/12/20 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python dumps和loads区别详解
2020/02/04 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
内刊编辑求职自荐书范文
2014/02/19 职场文书
住宅质量保证书
2014/04/29 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
检讨书格式
2019/04/25 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
python实现自动化群控的步骤
2021/04/11 Python