threading包的例子和queue包的例子
参考:https://www.cnblogs.com/tkqasn/p/5700281.html
参考:https://www.cnblogs.com/tkqasn/p/5700281.html
threading用于提供线程相关的操作,线程是程序工作中最小的单元,python当前版本的多线程库中没有实现优先级、线程组、线程也不能被停止、暂停、恢复、中断。
threading中提供的类包括:Thread、Lock、RLock、Condition、Event、Timer等
threading模块提供的常用方法包括:
threading.currentThread():返回当前的线程变量
threading.enumerate():返回一个包含当前正在运行的线程的list
threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())的效果相同
threading模块提供的常量:
threading.TIMEOUT_MAX:设置threading全局超时时间
简易的开启线程:
def sayhi(k):
print('your id is %s' %k)
t=threading.Thread(target=sayhi,args=('hh',)) #第一个参数target是线程函数变量,第二个参数args是一个数组变量参数如果只传递一个值就只需要一个i,如果要传递多个参数,那么还可以继续传递其他参数,其中逗号不能少,少了则不是数组。
t.start()
#type((1,))的返回结果为数组tuple
创建线程的两种方法:
import threading
import time
#方法一:将要执行的方法作为参数传给Thread的构造方法
def action(arg):
time.sleep(1)
print ('the arg is:%s\r' %arg) #\r表示指针回到该行开头
for i in range(4):
t =threading.Thread(target=action,args=(i,)) #开启线程,target表示要执行的方法,name表示线程名,args/kwargs表示要传入方法的参数
t.start()
print ('main thread end!')
# 或者先建Thread的一个继承类,然后用这个类中的start()方法打开:
t=threading.Thread(target=action,args=('hh',))
t.start()
#方法二:从Thread继承,并重写run()
class MyThread(threading.Thread):
def __init__(self,arg):
super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。
self.arg=arg
def run(self):#定义每个线程要运行的函数
time.sleep(1)
print ('the arg is:%s\r' % self.arg) for i in range(4):
t =MyThread(i)
t.start() print ('main thread end!')
简单的线程实例:
import threading
import queue
import time
class mn_access(threading.Thread):
def __init__(self,interval):
threading.Thread.__init__(self)
self.interval=interval
self.thread_stop=False
def run(self): #这个函数中存放用户自己的功能代码
i=1;
while not self.thread_stop:
print("thread%d %s: i am alive hehe %d" %(self.ident,self.name,i)) #name用于存放线程的名字,ident用于存放线程的标识
time.sleep(self.interval)
i=i+1
def stop(self):
self.thread_stop = True
if __name__ == "__main__":
mn=mn_access(1)
mn.start() #线程开始
time.sleep(5)
mn.stop()
queue包的例子:
class workder(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self.queue=queue
self.thread_stop=False
def run(self):
while not self.thread_stop:
print('thread %d %s :waiting for tast' %(self.ident,self.name))
try:
task=q.get(block=True,timeout=20) #接收消息
except queue.Empty:
print('nothing to do! i will go home')
self.thread_stop=True
break
print('task recv:%s,task no %d ' %(task[0],task[1]))
print('i am working')
time.sleep(3)
print('work finished')
q.task_done() #完成一个任务
res=q.qsize() #判断队列的大小
if res>0:
print('fuck there are still %d task to do '%res)
def stop(self):
self.thread_stop=True
if __name__=='__main__':
q=queue.Queue(3)
worker=workder(q)
worker.start()
q.put(['produce one cup',1],block=True,timeout=None) #产生任务消息
q.put(['produce one desk',2],block=True,timeout=None)
q.put(['produce one apple',3],block=True,timeout=None)
q.put(['produce one banana',4],block=True,timeout=None)
q.put(['produce one bag',5],block=True,timeout=None)
print('********wait for finish')
q.join() #等待所有任务完成
print('all task finished')
threading包的例子和queue包的例子的更多相关文章
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- JAVA Maven 安装 jar 包到本地仓库,以 Oracle11g 的访问包 为例
maven 作为 java 的首选包管理工具,使我们在创建和维护项目的时候变得十分简单,但是 maven 仓库并不是拥有的一切 jar 包的, 很多 jar 包由于收费或者版权什么的其他原因,并不存在 ...
- 用pip install升级已安装的包的附加包, 以tabulate包为例
用pip install升级已安装的附加包, 以tabulate包为例 去pypi官网查看tabulate包的介绍, 发现tabulate 0.7.6才开始支持宽字符的美化打印. 而且还需要安装它的附 ...
- 安装 RPM 包或者安装源码包
安装 RPM 包或者安装源码包 在windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续“下一步”即可,然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下. ...
- linux的基本操作(RPM包或者安装源码包)
RPM包或者安装源码包 在windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续“下一步”即可,然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下.所以你要 ...
- maven五:查找jar包坐标,选择jar包版本
查找jar包坐标 以spring core的jar包为例,访问http://www.mvnrepository.com/ 在最上方中间,输入spring core,点击Search. 搜索结果第 ...
- (四)maven之查找jar包坐标,选择jar包版本
① 先访问http://www.mvnrepository.com/ ,这个地址是maven的公共库. ② 以spring core的jar包为例.在页面的最上方的中间,输入spring ...
- 抓包工具:tcpdump抓包命令详解
抓包工具:tcpdump抓包命令详解 简介: tcpdump全称:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以 ...
- Jar 包下载以及 maven jar 包配置
学习内容: jar包下载是我们必须掌握的一个内容,不管是使用Maven项目还是其他项目,一般都需要引入外部的 jar 包 jar包下载 下载地址(打不开网址的直接百度搜索 maven reposito ...
随机推荐
- Linux内核调试方法总结之ftrace
ftrace [用途] ftrace包含一系列跟踪器,用于不同的场合,比如跟踪内核函数调用(function tracer).跟踪上下文切换(sched_switch tracer).查看中断被关闭的 ...
- qbzt day3 上午
内容提要 堆 lca(最近公共祖先) st表 hash 并查集 树状数组 线段树 数据结构 1.堆 Priority_queue 他滋兹:插入删除查询最大值(最小值) 分为大根堆小根堆 2.LCA 首 ...
- 无法绕开的cut, awk, sed命令
linux命令的选项和选项后面的值的方式: 如果用 短选项, 选项值就放在短选项的后面, 如果用长选项, 值就用等于的方式. 最重要的是, 短选项后面的值, 跟短选项之间, 可以用空格, 也可以紧接着 ...
- fedora23然后创建workspace?或者说是panel面板?
好像在fedora23中 无法再添加工作空间workspace. 系统会自动的在非空工作空间后面再生成一个空的工作空间. 而且 工作空间 好像不只 4个, 可以有很多个. panel面板好像也不能添加 ...
- LeetCode 10——正则表达式匹配
1. 题目 2. 解答 在 回溯算法 中我们介绍了一种递归的思路来求解这个问题. 此外,这个问题也可以用动态规划的思路来解决.我们定义状态 \(P[i][j]\) 为子串 \(s[0, i)\) 和 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_10 打印流_1_打印流_概述和使用
system.out就是打印流 System的源码里面out参数就是一个PrintStream类型的 例如路径写的是E盘,.没有e盘这个路径就会抛出异常 用println直接写入的就是97 这个 ...
- 测开之路一百一十一:bootstrap表单
bootstrap表单 引入bootstrap和jquery 默认表单 垂直表单 表单属性绑定:for属性,当for的属性和id的属性相同时,单击for标签,光标自动跳到相同属性的输入框 复选框 水平 ...
- Jenkins持续集成_03_添加测试报告
前言 Jenkins持续集成自动化测试项目后,可以在控制台输出中查看测试结果,但是这样排查起来往往不够直观.为了更直观的查看测试结果,可以在Jenkins上展示测试报告.测试报告中测试结果情况展示的更 ...
- 【ABAP系列】SAP ABAP实现发送外部邮件(添加附件)功能
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP实现发送外部邮件(添 ...
- Bootstrap 学习笔记 项目实战 首页内容介绍 上
效果图: HTML代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset ...