1. 多线程 (Multithreading)
多线程是指在一个进程中开启多个线程,多个线程共享同一内存空间。适合 I/O 密集型任务,但由于 Python 的 GIL (全局解释器锁),它不适合 CPU 密集型任务。多线程主要用于提高程序的并发性和响应性。
使用 threading
模块实现多线程:
复制编辑
import threading
import time
# 线程执行的任务
def task(thread_name):
print(f"{thread_name} 开始执行")
time.sleep(2) # 模拟耗时操作
print(f"{thread_name} 执行完毕")
# 创建线程
thread1 = threading.Thread(target=task, args=("线程1",))
thread2 = threading.Thread(target=task, args=("线程2",))
# 启动线程
thread1.start()
thread2.start()
# 等待线程完成
thread1.join()
thread2.join()
print("所有线程执行完毕")
2. 多进程 (Multiprocessing)
多进程是指开启多个进程,每个进程有自己独立的内存空间。Python 中的多进程适用于 CPU 密集型任务,因为每个进程都有自己的 Python 解释器和 GIL,可以充分利用多核 CPU 的性能。
使用 multiprocessing
模块实现多进程:
复制编辑
import multiprocessing
import time
# 进程执行的任务
def task(process_name):
print(f"{process_name} 开始执行")
time.sleep(2) # 模拟耗时操作
print(f"{process_name} 执行完毕")
if __name__ == "__main__":
# 创建进程
process1 = multiprocessing.Process(target=task, args=("进程1",))
process2 = multiprocessing.Process(target=task, args=("进程2",))
# 启动进程
process1.start()
process2.start()
# 等待进程完成
process1.join()
process2.join()
print("所有进程执行完毕")
区别与适用场景:
- 多线程:适用于 I/O 密集型任务,例如网络请求、文件读取等。由于线程共享内存空间,线程之间的通信和数据共享比较容易,但也容易产生同步问题。
- 多进程:适用于 CPU 密集型任务,例如图像处理、大规模计算等。由于每个进程拥有独立的内存空间,避免了 GIL 的限制,可以更好地利用多核 CPU。