Python核心开发知识(线程的理解)

StevenSun空间 2019-05-09

欢迎各位小哥哥小姐姐阅读本<小生>的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!!!

您的点赞和关注将是我持续更新的动力呢.^v^

有不懂的问题可以私聊我哦!

1.多任务:

让计算机在同一时间段内执行多个任务就是多任务。

计算机多任务实现原理:cpu时间片轮转

2.创建多线程的步骤:

导入threading模块
from threading import Thread
​
创建线程
t = threading.Thread(target=目标函数, args=(xxx,)) # 传参时为元组格式
​
t.start()开启线程
​
调用start()函数后才会启动线程。
主线程会等待所有子线程结束后才结束

3.使用继承的方式创建线程:

导入threading模块
​
import threading
​
创建类继承Thread类
class MyThread(threading.Thread):
​
 # 重写__init__方法:
 def __init__(self, num):
 super(MyThread, self).__init__() # 注意super()方法的格式
 self.num = num 
​
 # 重写run方法
 def run(self):
 for i in range(self.num):
 time.sleep(1)
 print('子线程')
​
if __name__ == '__main__':
​
 # 创建线程
 t = MyThread(5)
 t.start() # start方法启动线程, 并且调用run方法

4.线程注意点:

(1)每个线程都有一个名字,如果没有指定线程对象的name,python会自动为线程指定一个名字。

(2)当线程的run()方法结束时该线程完成。

(3)无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。

5.互斥锁:

# 导入threading模块
import threading
​
# 创建锁
mutex = threading.Lock()
​
# 锁定
mutex.acquire()
​
# 释放
mutex.release()
​
锁的优点:
 确保了某段关键代码只能由一个线程从头到尾完整地执行
​
锁的缺点:
 1.阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了
 2.由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁

6.死锁:

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。

避免死锁:
 1.程序设计时要尽量避免(如,银行家算法)
 2.添加超时时间等

7.同步和异步:

同步:指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。
 在代码中,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。
异步:和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
​
举例:
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后你自己去吃饭,我得到消息后可能立即走,也可能先忙完自己的事情等到下班才去吃饭。

相关推荐