Python进程和线程之多线程的使用及说明
Python之多线程的使用
前面提到过进程是由很多线程组成的,那么今天廖老师就详细解释了线程是如何运行的。
首先,Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。
绝大多数情况下,我们只需要使用threading这个高级模块。

根据廖老师的例子,运行出来如此的结果。
任何 Python 程序默认都在一个主线程中运行,该线程通常名为 MainThread
threading.current_thread().name用于获取当前正在执行的线程的名称。
t = threading.Thread(target=loop, name='LoopThread')
这里使用 threading.Thread类来创建一个线程对象 ,也就是我们所需要的支线线程
start()方法会启动新线程
这意味着 Python 会创建新的执行上下文,并几乎同时开始在新线程中执行 loop函数
重要的是,调用 start()后,主线程不会阻塞,它会继续向下执行(t.join()),而新线程 LoopThread也开始并发地执行自己的任务。
不过由于多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。
我们这里会引入一个lock语句
balance = 0
lock = threading.Lock()
def run_thread(n):
for i in range(100000):
# 先要获取锁:
lock.acquire()
try:
# 放心地改吧:
change_it(n)
finally:
# 改完了一定要释放锁:
lock.release()创建一个锁就是通过threading.Lock()来实现。
不过这里的锁虽然可以让我们的内容不那么紊乱,但是包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了甚至他会让多个锁在一起执行可能形成一个死锁。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Python dateutil库简化日期时间处理利器使用场景实践
在Python中,处理日期和时间是常见的任务之一,dateutil库是Python标准库中datetime模块的扩展,提供了许多方便的工具和函数,简化了日期和时间的操作2023-12-12
关于windows下Tensorflow和pytorch安装教程
Tensorflow是广泛使用的实现机器学习以及其它涉及大量数学运算的算法库之一。这篇文章主要介绍了Tensorflow和pytorch安装(windows安装),需要的朋友可以参考下2020-02-02
解决遇到PermissionError:[Errno 13] Permission den
遇到"PermissionError:[Errno 13] Permission denied"通常是权限不足导致,解决此问题的方法包括检查并更改文件权限,使用管理员权限运行命令,或接触文件所有者,这些步骤有助于确保用户具有执行操作所需的权限,有时,文件或目录可能被锁定2024-09-09


最新评论