python 多线程中子线程和主线程相互通信
主线程开启多个线程去干活,每个线程需要完成的时间不同,干完活以后都要通知给主线程,下面代码说明该应用:
代码块:
import threading
import queue
import time
import random '''
需求:主线程开启了多个线程去干活,每个线程需要完成的时间
不同,但是在干完活以后都要通知给主线程
多线程和queue配合使用,实现子线程和主线程相互通信的例子
'''
q = queue.Queue()
threads=[]
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)
# 通过q.put()方法,将每个子线程要返回给主线程的消息,存到队列中
self.q.put("我是第%d个线程,我睡眠了%d秒,当前时间是%s" % (self.t, self.j,time.ctime())) '''
# 生成15个子线程,加入到线程组里,
# 每个线程随机睡眠1-8秒(模拟每个线程干活时间的长短不同)
''' for i in range():
j=random.randint(,)
threads.append(MyThread(q,i,j)) # 循环开启所有子线程
for mt in threads:
mt.start()
print('进程开启时间:%s'%(time.ctime()))
'''
通过一个while循环,当q队列中不为空时,通过q.get()方法,
循环读取队列q中的消息,每次计数器加一,当计数器到15时,
证明所有子线程的消息都已经拿到了,此时循环停止
'''
count =
while True:
if not q.empty():
print(q.get())
count+=
if count==:
break
python 多线程中子线程和主线程相互通信的更多相关文章
- C#中子线程操作主线程中窗体上控件的方法
Demo this.listView1.Visible = true; this.listView1.BeginUpdate();this.listView1.EndUpdate(); //结束数据处 ...
- WPF里面多线程访问UI线程、主线程的控件
如果出现以下错误:调用线程无法访问此对象,因为另一个线程拥有该对象. 你就碰到多线程访问UI线程.主线程的控件的问题了. 先占位.
- 2018-10-31-WPF-在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待
title author date CreateTime categories WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 lindexi 2018-10-31 9:30:9 + ...
- 15.python并发编程(线程--进程--协程)
一.进程:1.定义:进程最小的资源单位,本质就是一个程序在一个数据集上的一次动态执行(运行)的过程2.组成:进程一般由程序,数据集,进程控制三部分组成:(1)程序:用来描述进程要完成哪些功能以及如何完 ...
- Python多线程、进程、协程
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Python进程、线程、协程
进程和线程的解释 进程(process)和线程(thread)是操作系统的基本概念,计算机的核心是CPU,它承担了所有的计算任务: 单个CPU一次只能运行一个任务,代表单个CPU总是运行一个进程,其他 ...
- python进程、线程、协程(转载)
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...
- Python进程、线程、协程详解
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- python——进程、线程、协程
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...
随机推荐
- linux下拷贝文件夹的时候排除其中的一些目录
http://blog.csdn.net/wind19/article/details/8960574 使用find cd /usr find ./tmp/ | grep -v tmp/dirc | ...
- matplotlib极坐标方法详解
一.极坐标 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向).对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到 ...
- Code POJ - 1780(栈模拟dfs)
题意: 就是数位哈密顿回路 解析: 是就算了...尼玛还不能直接用dfs,得手动开栈模拟dfs emm...看了老大半天才看的一知半解 #include <iostream> #inclu ...
- HTML 百度地图API调用示例源码
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 【BZOJ2425】[HAOI2010]计数(组合数学)
[BZOJ2425][HAOI2010]计数(组合数学) 题面 BZOJ 洛谷 题解 很容易的一道题目. 统计一下每个数位出现的次数,然后从前往后依次枚举每一位,表示前面都已经卡在了范围内,从这一位开 ...
- 洛谷 P1490 买蛋糕 解题报告
P1490 买蛋糕 题目描述 野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕.大家不知道最后要买的蛋 ...
- A1041. Be Unique
Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...
- 那些神奇的before和after使用方法
在英文单词里面:before是在什么之前.after是在什么之后.诚然,在我们的css里面, 通过使用before和after伪类元素,可以在我们想要的元素前面或者后面插入内容. 下面是使用befor ...
- Nginx的特性与核心类别及配置文件和模块详解
1.root path 设置web资源路径,用于指定请求的根文档目录,从根开始匹配 root:root/URI 2.alias path 指定路径别名,只能用于location中,从最后一个/开始匹配 ...
- C++ 栈和队列的使用
要使用标准库的栈和队列,首先得添加头文件 #include <stack> #include<queue> 定义栈: stack<int> curStack; 定 ...