参考: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包的例子的更多相关文章

  1. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  2. JAVA Maven 安装 jar 包到本地仓库,以 Oracle11g 的访问包 为例

    maven 作为 java 的首选包管理工具,使我们在创建和维护项目的时候变得十分简单,但是 maven 仓库并不是拥有的一切 jar 包的, 很多 jar 包由于收费或者版权什么的其他原因,并不存在 ...

  3. 用pip install升级已安装的包的附加包, 以tabulate包为例

    用pip install升级已安装的附加包, 以tabulate包为例 去pypi官网查看tabulate包的介绍, 发现tabulate 0.7.6才开始支持宽字符的美化打印. 而且还需要安装它的附 ...

  4. 安装 RPM 包或者安装源码包

    安装 RPM 包或者安装源码包 在windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续“下一步”即可,然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下. ...

  5. linux的基本操作(RPM包或者安装源码包)

    RPM包或者安装源码包 在windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续“下一步”即可,然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下.所以你要 ...

  6. maven五:查找jar包坐标,选择jar包版本

    查找jar包坐标 以spring core的jar包为例,访问http://www.mvnrepository.com/    在最上方中间,输入spring core,点击Search. 搜索结果第 ...

  7. (四)maven之查找jar包坐标,选择jar包版本

    ①    先访问http://www.mvnrepository.com/  ,这个地址是maven的公共库. ②   以spring core的jar包为例.在页面的最上方的中间,输入spring ...

  8. 抓包工具:tcpdump抓包命令详解

    抓包工具:tcpdump抓包命令详解 简介: tcpdump全称:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以 ...

  9. Jar 包下载以及 maven jar 包配置

    学习内容: jar包下载是我们必须掌握的一个内容,不管是使用Maven项目还是其他项目,一般都需要引入外部的 jar 包 jar包下载 下载地址(打不开网址的直接百度搜索 maven reposito ...

随机推荐

  1. javamail 附件以及正文加图片

    直接上代码 import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.uti ...

  2. Eclipse Java工程转为Web工程步骤

    找到工程的.project文件,在<natures>标签中增加以下两行配置:<nature>org.eclipse.wst.common.modulecore.ModuleCo ...

  3. VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计

    目录 目录 前文列表 备份思路 备份算法 备份细节 连接到 vCenter 还是 ESXi 如何选择快照类型 是否开启 CBT 如何获取备份数据 如何提高备份数据的传输率 备份厚置备磁盘和精简置备磁盘 ...

  4. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_1_Map集合概述

    map集合是双列集合 map有两个泛型.左边K也叫作键 右边V是value

  5. TensorFlow学习笔记5-概率与信息论

    TensorFlow学习笔记5-概率与信息论 本笔记内容为"概率与信息论的基础知识".内容主要参考<Deep Learning>中文版. \(X\)表示训练集的设计矩阵 ...

  6. dvorak键盘布局调整

    一站直达: http://www.kaufmann.no/roland/dvorak/

  7. Java提取文本文档中的所有网址(小案例介绍正则基础知识)

    正则表达式基础以及Java中使用正则查找 定义: 正则表达式是一些用来匹配和处理文本的字符串 正则的基础(先大致了解下) 1. 正则表达式的作用 查找特定的信息(搜索) 替换一些文本(替换) 2. 正 ...

  8. SpringBoot 整合 MybatisPlus (项目的创建及简单的单表查询)

    添加依赖 <!--mybatis-plus的springboot支持--> <dependency> <groupId>com.baomidou</group ...

  9. [APIO 2010] [LOJ 3144] 奇怪装置 (数学)

    [APIO 2010] [LOJ 3144] 奇怪装置 (数学) 题面 略 分析 考虑t1,t2时刻坐标相同的条件 \[\begin{cases} t_1+\lfloor \frac{t_1}{B} ...

  10. django的多语言国际化

    介绍 Django 支持国际化,多语言.Django的国际化是默认开启的,如果您不需要国际化支持,那么您可以在您的设置文件中设置 USE_I18N = False,那么Django会进行一些优化,不加 ...