python开启线程池(对python:threading.Thread类的使用方法详解)
python开启线程池
对python:threading.Thread类的使用方法详解Python Thread类表示在单独的控制线程中运行的活动。有两种方法可以指定这种活动:
1、给构造函数传递回调对象
|
mthread = threading.Thread(target = xxxx,args = (xxxx)) mthread.start() |
2、在子类中重写run() 方法
这里举个小例子:
|
import threading, time class MyThread(threading.Thread): def __init__( self ): threading.Thread.__init__( self ) def run( self ): global n, lock time.sleep( 1 ) if lock.acquire(): print n , self .name n + = 1 lock.release() if "__main__" = = __name__: n = 1 ThreadList = [] lock = threading.Lock() for i in range ( 1 , 200 ): t = MyThread() ThreadList.append(t) for t in ThreadList: t.start() for t in ThreadList: t.join() |
派生类中重写了父类threading.Thread的run()方法,其他方法(除了构造函数)都不应在子类中被重写,换句话说,在子类中只有_init_()和run()方法被重写。使用线程的时候先生成一个子线程类的对象,然后对象调用start()方法就可以运行线程啦(start调用run)
下面我们进入本文的正题threading.Thread类的常用函数与方法:
1、一旦线程对象被创建,它的活动需要通过调用线程的start()方法来启动。这方法再调用控制线程中的run方法。
2、一旦线程被激活,则这线程被认为是'alive'(活动)。当它的run()方法终止时-正常退出或抛出未处理的异常,则活动状态停止。isAlive()方法测试线程是否是活动的。大致上,线程从 start()调用开始那点至它的run()方法中止返回时,都被认为是活动的。模块函数enumerate()返回活动线程的列表。
3、一个线程能调用别的线程的join()方法。这将阻塞调用线程,直到拥有join()方法的线程的调用终止。
4、线程有名字,默认的是Thread-No形式的,名字能传给构造函数,通过setName()方法设置,用getName()方法获取。
5、线程能被标识为'daemon thread'(守护线程).这标志的特点是当剩下的全是守护线程时,则Python程序退出。它的初始值继承于创建线程。标志用setDaemon()方法设置,用isDaemon()获取。
6、存在'main thread'(主线程),它对应于Python程序的初始控制线程。它不是后台线程。
7、
|
class Thread(group = None , target = None , name = None , args = (), kwargs = {}) |
构造函数能带有关键字参数被调用。
这些参数是:
group 应当为 None,为将来实现Python Thread类的扩展而保留。
target 是被 run()方法调用的回调对象. 默认应为None, 意味着没有对象被调用。
name 为线程名字。默认形式为'Thread-N'的唯一的名字被创建,其中N 是比较小的十进制数。
args是目标调用参数的tuple,默认为空元组()。
kwargs是目标调用的参数的关键字dictionary,默认为{}。
8、如果子线程重写了构造函数,它应保证调用基类的构造函数(Thread._init_()),在线程中进行其他工作之前。(也就是派生类刚开始就要调用基类的构造函数)
9、start()
启动线程活动。在每个线程对象中最多被调用一次。它安排对象的run() 被调用在一单独的控制线程中。
10、run()
用以表示线程活动的方法。你可能在Python Thread类的子类重写这方法。标准的 run()方法调用作为target传递给对象构造函数的回调对象。
11、join([timeout])
等待至线程中止。阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
timeout参数不是None,它应当是浮点数指明以秒计的操作超时值。因为join()总是返回None,你必须调用isAlive()来判别超时是否发生。
当timeout 参数没有被指定或者是None时,操作将被阻塞直至线程中止。
线程能被join()许多次。
线程不能调用自身的join(),因为这将会引起死锁。
在线程启动之前尝试调用join()会发生错误。
12、
getName()
返回线程名。
setName(name)
设置线程名。
这名字是只用来进行标识目的的字符串。它没有其他作用。多个线程可以取同一名字。最初的名字通过构造函数设置。
isAlive()
返回线程是否活动的。
isDaemon()
返回线程的守护线程标志。
setDaemon(daemonic)
设置守护线程标志为布尔值daemonic。它必须在start()调用之前被调用。
当没有活动的非守护线程时,整个Python程序退出。
以上这篇对python:threading.Thread类的使用方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/drdairen/article/details/60962439
- python第三方库的使用方法和作用(Python第三方库face_recognition在windows上的安装过程)
- 协程在python中怎么使用(python协程之动态添加任务的方法)
- python教程列表排序(Python一行代码实现快速排序的方法)
- python中lambda函数是什么意思(python ---lambda匿名函数介绍)
- python自动处理图片(python制作图片缩略图)
- python列表中的数组(Python3.4学习笔记之列表、数组操作示例)
- python 配置文件环境变量(python环境路径配置以及命令行运行脚本)
- python统一支付接口(Python实现的微信支付方式总结三种方式)
- python浪漫表白源码(python七夕浪漫表白源码)
- python基础编程函数参数(详解Python 函数如何重载?)
- python语言支持多态(Python实现多态、协议和鸭子类型的代码详解)
- docker python如何运行(Docker容器化部署Python应用过程解析)
- python选择排序最大最小同时排序(Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例)
- python表格导出为图片(python生成带有表格的图片实例)
- python time模块是什么(python中时间模块的基本使用教程)
- pythonredis使用场景(python redis 删除key脚本的实例)
- 自制橡皮泥(自制橡皮泥)
- 还在卖 禁药西布曲明网上论斤卖(还在卖禁药西布曲明网上论斤卖)
- 微商在朋友圈热卖的 DL减肥咖啡 含违禁药物,你还敢买吗(微商在朋友圈热卖的)
- 八一节,说说中国女兵(八一节说说中国女兵)
- 王治郅菜鸟赛季已让八一带入正轨,大郅七大经典语录或是成功秘诀(王治郅菜鸟赛季已让八一带入正轨)
- 庆八一,重读经典红色语录,感悟互联网发展硬道理(重读经典红色语录)
热门推荐
- css3图片悬停切换代码(CSS3 实现的图片悬停的切换按钮)
- css制作磨砂图片(CSS制作梦幻彩虹效果)
- vueelementui表格操作(Vue组件库ElementUI实现表格列表分页效果)
- openssl 默认私钥类型(Windows安装Openssl并使用Openss生成公钥私钥)
- linux中输出和追加命令(linux驱动开发中常用函数copy_from_user open read write详解)
- 如何估算项目的开发时间
- sqlserver中根据类型分组(SQL SERVER 分组求和sql语句)
- postgresql docker 宿主机(本地Docker安装Postgres 12 + pgadmin的方法 支持Apple M1)
- css3各个动画效果(使用css3制作齿轮loading动画效果)
- python入门练习网页(详解python项目实战:模拟登陆CSDN)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9