在这篇文章中我们讨论如何在Python中使用multiprocessing模块。
- 如何创建并启动多个进程
- 如何等待进程结束
- 如何在进程间共享数据
- 如何使用锁来防止竞争条件
- 如何使用
Queue进行流程安全的数据/任务处理。 - 如何使用
Pool管理多个工作进程
创建和运行进程
你可以使用multiprocessing.Process()来创建一个进程。它有两个重要的参数:
target: 一个可调用对象(函数),这个进程将在进程启动时被调用。args: 函数参数。元组。
实例:
from multiprocessing import Process
import os
def square_numbers():
for i in range(1000):
result = i * i
if __name__ == "__main__":
processes = []
num_processes = os.cpu_count()
print(num_processes) # 计算机中的CPU数量
# 构造多个进程
for _ in range(num_processes):
process = Process(target=square_numbers)
processes.append(process)
# 执行进程、等待进程结束
for process in processes:
process.start()
process.join()
在进程间共享数据
既然进程不在同一个内存空间,那么它们就没有访问同一个(公开)数据的权限。
因此,它们需要特殊的共享内存对象来共享数据。
数据可以通过Value或Array来存储在共享内存中:
Value(type, value): 创建一个ctypes对象的类型是type。访问值使用.target。Array(type, value): 创建一个ctypes数组,其元素的类型是type。访问值使用[]。
任务:创建两个进程,每个进程都应该访问共享变量,并修改它(在这种情况下,只增加它重复100次)。
创建两个进程,每个进程都应该访问共享变量,并修改它(在这种情况下,只增加它重复100次)。
from multiprocessing import Process, Value, Array
import time
# 增加100次
def add_100(number):
for _ in range(100):
time.sleep(0.01)
number.value += 1
# number中每个位置增加100次
def add_100_array(numbers):
for _ in range(100):
time.sleep(0.01)
for i in range(len(numbers)):
numbers[i] += 1
if __name__ == "__main__":</

本文深入探讨了Python中的多进程编程,包括如何创建和运行进程、进程间共享数据、理解锁的作用以及如何解决竞争条件。还介绍了使用队列进行进程间通信以及进程池的概念,为高效并行处理提供了实用的方法和示例。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



