[Python | CS基础 ]Python多线程`threading`和多进程`multiprocessing`

多线程和多进程的Python实现

1. 多线程实现

1.1 原理

  • Python的多线程模块**threading**允许程序并发执行多个任务。
  • 由于全局解释器锁(GIL),Python的线程可能无法实现真正的并行执行,适合I/O密集型任务。

1.2 示例代码

python 复制代码
import threading
import time

# 定义线程要执行的函数
def print_numbers(threadName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print(f"{threadName}: {count}")

# 创建线程对象
thread1 = threading.Thread(target=print_numbers, args=("Thread-1", 1,))
thread2 = threading.Thread(target=print_numbers, args=("Thread-2", 2,))

# 启动线程
thread1.start()
thread2.start()

# 等待线程执行结束
thread1.join()
thread2.join()

1.3 代码解释

  • print_numbers函数接受线程名称和延迟时间作为参数,并在循环中打印数字。
  • threading.Thread创建线程对象,target指定线程要执行的函数,args传递给函数的参数。
  • start()方法启动线程,join()方法等待线程完成。

2. 多进程实现

2.1 原理

  • Python的**multiprocessing**模块允许程序创建多个进程,每个进程有自己的内存空间和Python解释器,可以绕过GIL,适合计算密集型任务。

2.2 示例代码

python 复制代码
from multiprocessing import Process
import time

# 定义进程要执行的函数
def print_numbers(processName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print(f"{processName}: {count}")

# 创建进程对象
process1 = Process(target=print_numbers, args=("Process-1", 1,))
process2 = Process(target=print_numbers, args=("Process-2", 2,))

# 启动进程
process1.start()
process2.start()

# 等待进程执行结束
process1.join()
process2.join()

2.3 代码解释

  • print_numbers函数接受进程名称和延迟时间作为参数,并在循环中打印数字。
  • Process创建进程对象,target指定进程要执行的函数,args传递给函数的参数。
  • start()方法启动进程,join()方法等待进程完成。

3. 休眠的作用

3.1 原因

  • 模拟耗时操作:模拟文件读写、网络通信等耗时任务。
  • 避免过快执行:减慢执行速度,便于观察输出。
  • 展示并发效果:增加线程切换机会,展示并发执行效果。
  • 避免资源竞争:减少同时访问共享资源的可能性。
  • 控制执行顺序:通过调整休眠时间,影响执行顺序。
  • 测试和调试:帮助开发者理解执行流程,定位问题。

3.2 示例代码中的休眠

  • 在多线程和多进程的示例代码中,time.sleep(delay)用于休眠指定的时间(秒),其中delay是传递给函数的参数。
相关推荐
笨笨饿1 分钟前
#137_死机恢复现场_Armino平台AP系统swd调试
git·python·stm32·单片机·嵌入式硬件·物联网·vim
2601_962382433 分钟前
python常用函数大全pdf-python函数大全.pdf
python·内置函数·io操作·集合操作·数学运算
hzp6665 分钟前
doris学习6:参数调优
数据库·doris·参数·数据库调优
奈斯先生Vector27 分钟前
AIGC 视频生成实战:用 Kling Video 拆解文生视频、图生视频与完整工作流
开发语言·人工智能·windows·python·aigc·音视频
小玮看世界32 分钟前
[Python]螺旋遍历 vs 最短路径:方向控制类算法的“同源异流”
开发语言·python·算法
OPEN-F43 分钟前
ROS2系列教程:tf2坐标变换详解(C++/Python)
开发语言·c++·python
盟道科技44 分钟前
小程序电商订单超时自动取消的三种实现方案:定时扫描、Redis 过期监听、延迟消息对比与生产落地
数据库·redis·小程序
2601_962097361 小时前
Python工作流实战:SpiffWorkflow深度应用与BPMN自动化指南
python·自动化·工作流·bpmn·spiffworkflow
剑锋所指,所向披靡!1 小时前
MySQL存储引擎
数据库·mysql
reasonsummer1 小时前
【办公类-146-05】20260901《一分园、二分园四大教育》(优化版:标题excle+复制AI文字+Python占位符录入)
开发语言·数据库·c#