多线程(thread)
如何理解线程?
比如在qq里面,可以同时语音和视频,在word里面,可以同时打字、拼写检查
这些同时执行的就可以理解为线程
多任务-多进程、多线程
进程和线程的区别
(1)线程属于进程,一个线程只能属于一个进程,一个进程里面可以有多个线程。
(2)系统分配资源的基本单位是进程。
(3)系统调度资源的基本单位是线程。
画图理解
以前的程序只有一个进程,主进程,在这个进程里面只有一个线程,主线程
创建线程
(1)面向过程创建
t = threading.Thread(target=xxx, name=xxx, args=(xxx,))
target: 线程启动要执行的函数
name: 给线程起名字 threading.current_thread().name
args: 主线程给子线程传递参数
t.start()
t.join()
(2)面向对象创建
线程之间是否共享局部变量
不共享
线程之间是否共享全局变量
共享
线程安全、线程同步
a += 1
多个线程往同一个文件中写内容
锁,独自使用,开锁,
在操作之前加锁,然后操作,操作完毕之后,释放锁
上锁的时候是抢的。
牺牲了性能。
from threading import Lock
# 创建一把锁, 多个线程使用一把锁
lock = Lock()
# 上锁
lock.acquire()
# 释放锁
lock.release()