京公网安备 11010802034615号
经营许可证编号:京B2-20210330
Python中多线程的创建及基本调用方法
1. 多线程的作用
简而言之,多线程是并行处理相互独立的子任务,从而大幅度提高整个任务的效率。
2. Python中的多线程相关模块和方法
Python中提供几个用于多线程编程的模块,包括thread,threading和Queue等
thread模块提供了基本的线程和锁的支持,除产生线程外,也提供基本的同步数据结构锁对象,其中包括:
start_new_thread(function, args kwargs=None) 产生一个新的线程来运行给定函数
allocate_lock() 分配一个LockType类型的锁对象
exit() 让线程退出
acquire(wait=None) 尝试获取锁对象
locked() 如果获取了锁对象返回TRUE,否则返回FALSE
release() 释放锁
threading提供了更高级别,功能更强的线程管理功能
Thread类 表示一个线程的执行的对象
Lock 锁原语对象
RLock 可重入锁对象,使单线程可以再次获得已经获取锁
queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构
可用于进程间的通讯,让各个线程之间共享数据
模块函数queue(size) 创建一个大小为size的Queue对象
queue对象函数 qsize() 返回队列大小
empty() 队列为空返回True,否则返回False
put(item, block=0) 把ITEM放到队列中,block不为0,函数会一直阻塞到队列中
get(block=0) 从队列中取一个对象,若果给block,函数会一直阻塞到队列中有对象为止
3.示例
目前Python的lib中对多线程编程提供两种启动方法,一种是比较基本的thread模块中start_new_thread方法,在线程中运行一个函数, 另一种是使用集成threading模块的线程对象Thread类。
目前所用到的,是旧版本中调用thread模块中的start_new_thread()函数来产生新的线程
相比而言,thread.start_new_thread(function,(args[,kwargs]))实现机制其实与C更为类似,其中function参数是将要调用的线程函数;(args[,kwargs])是将传递给待创建线程函数的参数组成的元组类型,其中kwargs是可选的参数。新创建的线程结束一般依靠线程函数的执行结束自动退出,或者在线程函数中调用thread.exit()抛出SystemExit
exception,达到线程退出的目的。
print "=======================thread.start_new_thread启动线程============="
import thread
#Python的线程sleep方法并不是在thread模块中,反而是在time模块下
import time
def inthread(no,interval):
count=0
while count<10:
print "Thread-%d,休眠间隔:%d,current Time:%s"%(no,interval,time.ctime())
#使当前线程休眠指定时间,interval为浮点型的秒数,不同于Java中的整形毫秒数
time.sleep(interval)
#Python不像大多数高级语言一样支持++操作符,只能用+=实现
count+=1
else:
print "Thread-%d is over"%no
#可以等待线程被PVM回收,或主动调用exit或exit_thread方法结束线程
thread.exit_thread()
#使用start_new_thread函数可以简单的启动一个线程,第一个参数指定线程中执行的函数,第二个参数为元组型的传递给指定函数的参数值
thread.start_new_thread(inthread,(1,2))
#线程执行时必须添加这一行,并且sleep的时间必须足够使线程结束,如本例
#如果休眠时间改为20,将可能会抛出异常
time.sleep(30)
'''
使用这种方法启动线程时,有可能出现异常
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
解决:启动线程之后,须确保主线程等待所有子线程返回结果后再退出,如果主线程比子线程早结束,无论其子线程是否是后台线程,都将会中断,抛出这个异常
若没有响应阻塞等待,为避免主线程提前退出,必须调用time.sleep使主线程休眠足够长的时间,另外也可以采用加锁机制来避免类似情况,通过在启动线程的时候,给每个线程都加了一把锁,直到线程运行介绍,再释放这个锁。同时在Python的main线程中用一个while循环来不停的判断每个线程锁已释放。
import thread;
from time import sleep,ctime;
from random import choice
#The first param means the thread number
#The second param means how long it sleep
#The third param means the Lock
def loop(nloop,sec,lock):
print "Thread ",nloop," start and will sleep ",sec;
sleep(sec);
print "Thread ",nloop," end ",sec;
lock.release();
def main():
seconds=[4,2];
locks=[];
for i in range(len(seconds)) :
lock=thread.allocate_lock();
lock.acquire();
locks.append(lock);
print "main Thread begins:",ctime();
for i,lock in enumerate(locks):
thread.start_new_thread(loop,(i,choice(seconds),lock));
for lock in locks :
while lock.locked() :
pass;
print "main Thread ends:",ctime();
if __name__=="__main__" :
main();
很多介绍说在新python版本中推荐使用Threading模块,目前暂没有应用到。。。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
大学里“比较有用”的证书,不能靠一张榜单排出来。同一张证,对目标岗位明确的人是简历上的能力证据,对没有方向的人只是一次报 ...
2026-10-29“比较好考”是选证书时最常被搜索、也最容易被误读的一个词。有人把它理解成报名条件宽松,有人理解成科目少、背一背就能过,还 ...
2026-10-29本科毕业能考的证书很多,但真正值得在毕业求职阶段投入的,通常只有一两个。判断顺序建议反过来:先按报考资格分档,确认“现在 ...
2026-10-29“中国证书难度排行”很难做成一张绝对总榜。原因不在证书太多,而在“难”的口径不同:有的证书难在报名资格,工作年限和专业限 ...
2026-10-29先把结论说清楚:真正以“在校学籍”为报考前置、社会人员完全不能报的证书并不多。网上流传的“大学生专属证书”清单,很多其实 ...
2026-10-29“有哪些比较好考的证书”,这个问题看似在要一份名单,实际难点在于“好考”本身没有统一口径。有人指报名不设专业限制,有人指 ...
2026-10-29“考什么证书有用”这个问题,很难有一个统一答案。同一张证书,对想进某个行业的人是敲门砖,对已经在该行业工作多年的人可能只 ...
2026-10-29大专学历能考的证书不少,但真正值得投入时间的,要先过两道筛子:第一道是“大专能不能报”,第二道是“这个证对应什么岗位、能 ...
2026-10-29“普通人能考的证书”这个问题,真正的难点不在找证书名单,而在两件事:一是你能不能报,二是考完有没有对应的岗位任务。前者看 ...
2026-10-29“女孩子容易考什么证”这个问题,真正难的不是找证书名单,而是“容易”两个字没有说清。报考门槛低,不等于考试简单;考试简单 ...
2026-10-29先说结论:不存在一张“所有女性都吃香”的证书。把“吃香”拆开看,无非三种意思——能不能进某个岗位(岗位需求)、单位认不认 ...
2026-10-29上班族选证书,最容易犯的错是先看“哪个证含金量高”,再倒推自己要不要考。更稳妥的顺序反过来:先看这个证能不能在业余时间学 ...
2026-10-29“目前哪个证书含金量高”没有放之四海皆准的答案。同一张证书,对财会在校生、想转行做数据分析的在职人员、工程从业者,价值完 ...
2026-10-29会计岗位没有一张“通吃”的证书。比较务实的思路是:先确认自己当前做的是哪一段工作——出纳与核算、成本与总账、税务申报、审 ...
2026-10-29计算机专业能考的证书不少,但真正值得先考的,取决于你准备走哪条岗位路径。比较稳妥的分类是四类:软考职称类、厂商技术认证、 ...
2026-10-29“国家认可的人工智能证书”这句话本身容易误导。证书体系里并没有一个统一的“国家认可”标签,同一个说法可能指向五种完全不同 ...
2026-10-29“各个行业都能考的证书”这句话,其实包含两个不同的问题:一是报考时不限专业、不限行业;二是考出来以后,在不同行业的岗位上 ...
2026-10-29大学生考证最容易踩的坑,是把“别人考了什么”当成自己的清单。更实用的做法是先回答三个问题:我打算投什么岗位?这个证书现在 ...
2026-10-29结论先说:大学生没有适合所有人的“必考清单”,把证书控制在2—4本核心组合较合理——1—2本通用基础,1—2本岗位技能,学有余 ...
2026-10-29成人大学学历能考什么证书,先看两件事:你的学历层次是成人大专还是成人本科,以及你打算去的岗位有没有证书门槛。判断顺序应当 ...
2026-10-29