多个线程类似于同时运行多个不同的程序,但具有以下优点 -在此所写文章做成笔记记录的形式,书写代码过程中难免取之互联网,有的是本人书写,推崇自己一些见解想法,在看文章之前呢,小编推荐一个企鹅群,群里分子非常踊跃交流经验遇坑问题,也有初学者交流讨论,群内整理了也整理了大量的PDF书籍和学习资料,程序员也很热心的帮助解决问题,还有讨论工作上的解决方案,非常好的学习交流地方!群内大概有好几千人了,喜欢python的朋友可以加入python群:526929231欢迎大家交流讨论各种奇技淫巧,一起快速成长
一个进程中的多个线程与主线程共享相同的数据空间,因此可以更容易地共享信息或与彼此进行通信,而不是如果它们是单独的进程。
线程有时被称为轻量级进程,并且不需要太多的内存开销; 他们比流程便宜。
一个线程有一个开始,一个执行序列和一个结论。它有一个指令指针,用于跟踪当前正在运行的上下文中的哪个位置。
它可以被预先占用(中断)
当其他线程正在运行时,它可以暂时被搁置(也称为睡眠) - 这被称为屈服。
开始一个新的主题
要产生另一个线程,你需要调用线程模块中可用的以下方法-
这种方法调用可以在Linux和Windows中快速高效地创建新线程。
该方法调用立即返回,并且子线程开始并使用传递的参数列表调用函数。当函数返回时,线程终止。
在这里,参数是一个参数的元组; 使用一个空元组来调用函数而不传递任何参数。kwargs是一个关键字参数的可选字典。
例
当上面的代码被执行时,它会产生以下结果 -
虽然它对低级线程非常有效,但与新线程模块相比,线程模块非常有限。
该线程模块
Python 2.4中包含的新线程模块为线程提供了比上一节讨论的线程模块更强大的高级支持。
该线程模块公开的所有方法的线程模块,并提供了一些额外的方法-
threading.activeCount() - 返回处于活动状态的线程对象的数量。
threading.currentThread() - 返回调用者的线程控制中的线程对象的数量。
threading.enumerate() - 返回当前活动的所有线程对象的列表。
除了这些方法之外,线程模块还具有实现线程的Thread类。Thread类提供的方法如下 -
run() - run()方法是线程的入口点。
start() - start()方法通过调用run方法来启动一个线程。
join([time]) - join()等待线程终止。
isAlive() - isAlive()方法检查线程是否仍在执行。
getName() - getName()方法返回线程的名称。
setName() - setName()方法设置线程的名称。
使用线程模块创建线程
要使用线程模块实现新的线程,您必须执行以下操作 -
定义Thread类的新子类。
重写__init __(self [,args])方法来添加其他参数。
然后,重写run(self [,args])方法来实现线程在启动时应该执行的操作。
一旦创建了新的Thread子类,就可以创建它的一个实例,然后通过调用start()来启动一个新的线程,start()又调用run()方法。
例
当上面的代码被执行时,它会产生以下结果 -
同步线程
Python提供的线程模块包含一个简单的实现锁定机制,允许您同步线程。通过调用Lock()方法创建一个新的锁,该方法返回新的锁。
新锁对象的acquire(blocking)方法用于强制线程同步运行。可选的阻塞参数使您可以控制线程是否等待获取锁定。
如果阻塞设置为0,则线程立即返回0值(如果无法获取锁定),如果锁定获取则返回1。如果阻塞设置为1,线程将阻塞并等待锁释放。
新锁对象的release()方法用于释放不再需要的锁。
例
当上面的代码被执行时,它会产生以下结果 -
多线程优先级队列
该队列模块允许你创建一个新的队列对象,可容纳物品的具体数量。有以下方法来控制队列 -
get() - get()从队列中删除并返回一个项目。
put() - put将项目添加到队列中。
qsize() - qsize()返回当前队列中的项目数。
empty() - 如果队列为空,则empty()返回True; 否则,错误。
full() - 如果队列已满,full()返回True; 否则,错误。
例
当上面的代码被执行时,它会产生以下结果 -
END
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved