1.函数创建
from threading import Thread
import time
defMythred(name):
print('%s正在运行' % name)
time.sleep(3)
print('%s 结束运行' % name)
t = Thread(target=Mythred, args=('summer',))
t.start()
print('主线程')
------------
2.类继承
classMyThread(Thread):
def__init__(self, name):
super().__init__()
self.name = name
defrun(self):
print(f'{self.name}正在运行')
time.sleep(4)
print(f'{self.name}结束运行')
t = MyThread('summer')
t.start()
print('主线程')
线程join方法
主线程等到子线程运行结束之后再运行
deftask():
deftask():
from threading import Thread
import time
classMyThread(Thread):
def__init__(self, name):
super().__init__()
self.name = name
defrun(self):
print(f'{self.name}正在运行')
time.sleep(4)
print(f'{self.name}结束运行')
t = MyThread('summer')
t.start()
t.join()
print('主线程')
同一个进程下线程数据共享
from threading import Thread
money = 1000defres():
global money
money = 999print(money)
t = Thread(target=res)
t.start()
t.join()
print(money)
线程对象数据和方法
1.进程号
同一个进程下开设的多个线程拥有相同的进程号
2.线程名
from threading import Thread, current_thread
current_thread().name
主:MainThread 子:Thread-N
from threading import Thread,current_thread
import time
import os
print(current_thread().name) # MainThread主线程deftask():
print('子线程')
time.sleep(5)
print('子线程结束')
print('子线程',os.getpid()) # 子线程 238608print('子线程名',current_thread().name) # 子线程名 Thread-1
t = Thread(target=task)
print('主线程',os.getpid()) # 主线程 238608
t.start()
3.进程下的线程数
active_count()
t = Thread(target=task)
print('主线程',os.getpid()) # 主线程 238608
t.start()
print('当前进程下活跃的线程数量',active_count()) # 当前进程下活跃的线程数量 2
守护线程
# 主线程需要等待所有的非守护线程结束才能结束from threading import Thread
import time
defres():
print('子线程')
time.sleep(3)
print('子线程结束')
t = Thread(target=res)
t.daemon = True
t.start()
print('主线程')
GIL全局解释器锁
# 官方文档对GIL的解释
In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management isnot thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)
1.GIL是Cpython解释器的特点,不是python语言的
2.GIL的存在是为了防止Cpython解释器垃圾回收机制造成数据不安全
3.GIL的本质其实是一把互斥锁,只不过它用于维护解释器级别的数据安全,针对不同 的数据应该加不同的锁!!!
用户自定义的互斥锁是保护业务数据的安全
4.python同一个进程下的多个线程无法利用多核优势
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现