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编程中的运用实例
Jun 26 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
python 截取 取出一部分的字符串方法
Mar 01 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python交互界面的退出方法
Feb 16 Python
Python搭建Spark分布式集群环境
Jul 05 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 Python
pytorch 实现多个Dataloader同时训练
May 29 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
模仿OSO的论坛(五)
2006/10/09 PHP
PHP多个版本的分析解释
2011/07/21 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
javascript 闭包详解
2015/02/15 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
Python编程中的反模式实例分析
2014/12/08 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
进修护士自我鉴定
2013/10/14 职场文书
化工工艺设计求职信
2014/06/25 职场文书
倡议书的格式写法
2015/04/28 职场文书
2015年副班长工作总结
2015/05/15 职场文书
跳高加油稿
2015/07/21 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书