- Python提供了几个用于多线程编程的模块,包括thread、threading和Queue等。thread和threading模块允许程序员创建和管理线程。thread模块提供了基本的线程和锁的支持,threading提供了更高级别、功能更强的线程管理的功能。Queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构。
- 由于更高级别的threading模块更为先进,对线程的支持更为完善,因此推荐大家使用该模块!
- 由于前面已经详细的说明过进程,而线程与进程基本一致,所以此处简单说明:
- 线程的两种创建方式
from threading import Thread
import time
def func(num):
time.sleep(1)
print('num的值是:',num)
if __name__ == '__main__':
for i in range(3):
#创建好了一个子线程(在主线程中创建)
t = Thread(target=func,args=(1,))
t.start()
#类式创建
from threading import Thread
import time
class MyThread(Thread):
def __init__(self):
super().__init__()
def run(self):
print('当前子线程正在执行')
time.sleep(1)
print('当前子线程执行结束')
for i in range(3):
t = MyThread() #创建线程对象
t.start() #启动线程对象
from threading import Thread
import time
class MyThread(Thread):
def __init__(self):
super().__init__()
def run(self):
print('当前子线程正在执行')
time.sleep(2)
print('当前子线程执行结束')
if __name__ == '__main__':
start = time.time()
ts = []
for i in range(3):
t = MyThread() #创建线程对象
t.start() #启动线程对象
ts.append(t)
for t in ts:
t.join()
print('总耗时:',time.time()-start)
from threading import Thread
import time
def work():
global n
n = 0
if __name__ == '__main__':
n = 1
t = Thread(target=work)
t.start()
print(n)
- 守护线程
- 无论是进程还是线程,都遵循:守护xx会在主xx运行完毕后被销毁,不管守护xx时候被执行结束。
from threading import Thread
import time
def work():
time.sleep(1)
print('子线程正在执行!')
if __name__ == '__main__':
t = Thread(target=work)
t.daemon = True
t.start()
print('主线程结束!')
- 重点:线程池
- 线程预先被创建并放入线程池中,同时处理完当前任务之后并不销毁而是被安排处理下一个任务,因此能够避免多次创建线程,从而节省线程创建和销毁的开销,能带来更好的性能和系统稳定性。
from multiprocessing.dummy import Pool
import time
urls = ['www.1.com','www.2.com','www.3.com','www.4.com','www.5.com']
def get_reqeust(url):
print('正在请求数据:',url)
time.sleep(2)
print('请求结束:',url)
start = time.time()
pool = Pool(5)
pool.map(get_reqeust,urls)
print('总耗时:',time.time()-start)
pool.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具