线程
本章主题
关键词
多任务
多任务介绍
同时做多件事情(多个任务)就叫多任务。
多任务理解
• 并发:CPU小于当前的执行的任务。是假的多任务;
• 并行:CPU 大于当前执行的任务。是真的多任务。
实现多任务的三种方式
• 线程
• 进程
• 协程
线程
线程介绍
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
使用线程完成多任务
import threading # 内置模块
import time
def demo():
for i in range(3):
print("hello world")
time.sleep(1)
if __name__ == '__main__':
t = threading.Thread(target=demo)
t.start()
print("1")
注意:
• 主线程会等到子线程执行结束之后主线程,才会结束
防护线程
守护线程,也就是说不会等子线程结束
使用方法: t.setDaemon(True)
那是否可以实现子线程结束完毕,主线程才继续执行呢?
使用方法:t.join()
查看线程数量
使用threading.enumerate()来查看当前线程的数量。
import threading
import time
def demo1():
for i in range(3):
print(f"--demo1--{i}")
time.sleep(1)
def demo2():
for i in range(3):
print(f"--demo2--{i}")
time.sleep(1)
def main():
t1 = threading.Thread(target=demo1)
t2 = threading.Thread(target=demo2)
t1.start()
t2.start()
print(threading.enumerate())
if __name__ == '__main__':
main()
验证子线程的执行与创建
当调用Thread的时候,不会创建线程。
当调用Thread创建出来的实例对象的start方法的时候,才会创建线程以及开始运行这个线程。
继承Thread类创建线程
import threading
import time
class A(threading.Thread):
def __init__(self,name):
super().__init__(name=name)
def run(self):
for i in range(5):
print(i)
if __name__ == "__main__":
t = A('test_name')
t.start()
多线程共享全局变量(线程间通信)
import threading
import time
num = 100
def demo1():
global num # 2.声明为全局变量
num += 1 # 1.函数作用域 访问不到外边的num 所以报错 找不到
print(f"demo----{num}")
def demo2():
print(f"demo1----{num}")
def main():
t1 = threading.Thread(target=demo1)
t2 = threading.Thread(target=demo2)
t1.start()
time.sleep(1)
t2.start()
time.sleep(1)
if __name__ == '__main__':
main()
多线程之间传参
import threading
import time
num = [11, 22]
def demo1(num):
num.append(33)
print(f"demo----{num}" )
def demo2(num):
print(f"demo1----{num}")
def main():
t1 = threading.Thread(target=demo1, args=(num,))
t2 = threading.Thread(target=demo2, args=(num,))
t1.start()
time.sleep(1)
t2.start()
time.sleep(1)
print(f"main----{num}")
总结小便条
本篇文章主要讲了以下几点内容:
本章回顾暂时就到这了,如果还有点晕,那就把文章里所有引用的案例代码再敲几遍吧。拜拜~