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 04 Python
Python栈类实例分析
Jun 15 Python
python实现拓扑排序的基本教程
Mar 11 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
python读取ini配置文件过程示范
Dec 23 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
jupyter notebook 写代码自动补全的实现
Nov 02 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
中英文字符串翻转函数
2008/12/09 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP 快速排序算法详解
2014/11/10 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
Python的词法分析与语法分析
2013/05/18 Python
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
村级个人对照检查材料
2014/08/22 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
国家助学金受助感言
2015/08/01 职场文书