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程序与C程序的结合使用
Apr 07 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
django连接oracle时setting 配置方法
Aug 29 Python
python中time库的实例使用方法
Oct 31 Python
python 实现简单的FTP程序
Dec 27 Python
基于python爬取有道翻译过程图解
Mar 31 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 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
一个用于网络的工具函数库
2006/10/09 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
javascript中的隐式调用
2018/02/10 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
用Python进行简单图像识别(验证码)
2018/01/19 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Python调用C语言的实现
2019/07/26 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
什么是.net
2015/08/03 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
副科竞争上岗演讲稿
2014/05/12 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
企业贷款委托书格式
2014/09/12 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS