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 ...
随机推荐
- VB 获取所有窗体菜单信息
VERSION 5.00 Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX&q ...
- python-笔记(六)模块操作以及常用模块简介
模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思是说把python代码写到里面,文件名就是模块的名称,例如:model.py model就是模块名称. 什么是包? ...
- 快速入门分布式消息队列之 RabbitMQ(1)
目录 目录 前言 简介 安装 RabbitMQ 基本对象概念 Message 消息 Producer 生产者 Consumer 消费者 Queue 队列 Exchange 交换机 Binding 绑定 ...
- dataframe指定位置插入行
1 loc( ) 函数可以定位行后,并直接赋值插入. 如下可见loc函数对直接改变原来行的值 df = pd.DataFrame({ '动物' : ['狗','猫','兔'], '数量' : [ 3, ...
- UI自动化之8种基础定位
UI自动化的核心在于定位 目录 1.8种基础定位方法 2.xpath定位 3.css定位 4.多组元素 1.8种基础定位方法 driver.find_element_by_id() #id定位 dri ...
- KETTLE——(三)数据输出
数据输出和数据输入基本差不多,KETTLE本身支持的数据输出方式也特别多,还是以数据库输出为例. 打开表输出的界面,简单介绍一下其功能: 就这个界面,如果不勾选[指定数据库字段],KETTLE ...
- 深入理解任何Binder Client都可以直接通过ServiceManager的0这个Binder句柄创建一个BpBinde
ServiceManager是安卓中一个重要的类,用于管理所有的系统服务,维护着系统服务和客户端的binder通信.对此陌生的可以先看系统服务与ServiceManager来了解应用层是如何使用Ser ...
- 桌面应用开发用到的Framework
桌面应用开发用到的Framework https://github.com/zhangqs008/Framework_Winform
- python+selenium的frame表单切换
switch_to.frame() 切换frame switch_to.default_content() 切 ...
- Python:库文件
可以引用的Python文件:自己写的.py + 外部库(external libraries)