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系列之数据处理编程实例(一)
May 22 Python
Python中用Descriptor实现类级属性(Property)详解
Sep 18 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
python实现树形打印目录结构
Mar 29 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
Python-for循环的内部机制
Jun 12 Python
Django URL参数Template反向解析
Nov 24 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
PHP缓存技术的多种方法小结
2012/08/14 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
PHP7匿名类用法分析
2016/09/26 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
四查四看剖析材料
2014/02/14 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
公司股东合作协议书
2014/09/14 职场文书
质检员岗位职责范本
2015/04/07 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
创业计划之特色精品店
2019/08/12 职场文书
mysql的单列多值存储实例详解
2022/04/05 MySQL