优草派  >   Python

Python标准库之多进程(multiprocessing包)介绍

张鹏            来源:优草派

多进程是指同时运行多个独立的进程,每个进程都可以独立执行特定的任务。在Python中,多进程可以使用multiprocessing包实现。multiprocessing包是Python标准库中的一个模块,提供了多进程编程的工具和接口。本文将从多个角度介绍multiprocessing包的使用。

1. 多进程的优点

Python标准库之多进程(multiprocessing包)介绍

多进程主要有以下优点:

- 充分利用多核CPU,提高程序运行效率;

- 可以避免单个程序崩溃导致整个系统崩溃的问题;

- 可以提高程序的可靠性和稳定性,避免资源竞争的问题。

2. multiprocessing包的常用类和函数

multiprocessing包提供了一些常用的类和函数,包括:

- Process类:用于创建进程;

- Queue类:用于进程之间的数据传递;

- Pool类:用于创建进程池;

- Manager类:用于管理进程之间的共享状态。

3. 使用Process类创建进程

使用Process类可以创建新的进程,例如:

```python

import multiprocessing

def worker():

print('Worker')

if __name__ == '__main__':

p = multiprocessing.Process(target=worker)

p.start()

```

这段代码创建了一个新的进程,执行worker函数。在创建进程前,需要注意判断代码是否在主程序中运行,这是为了避免在子进程中重复运行主程序的代码。

4. 使用Queue类传递数据

在多进程编程中,进程之间需要进行数据传递。Queue类提供了一个简单的接口,可以用于进程之间的数据传递,例如:

```python

import multiprocessing

def worker(q):

data = q.get()

print('Worker got:', data)

if __name__ == '__main__':

q = multiprocessing.Queue()

p = multiprocessing.Process(target=worker, args=(q,))

p.start()

q.put('Hello')

p.join()

```

这段代码创建了一个Queue对象,用于传递数据。在创建进程时,将Queue对象作为参数传递给进程函数。在主进程中,使用put方法向队列中添加数据,子进程使用get方法获取数据。

5. 使用Pool类创建进程池

在需要创建多个进程的场景中,可以使用Pool类创建进程池,例如:

```python

import multiprocessing

def worker(num):

return num * num

if __name__ == '__main__':

nums = [1, 2, 3, 4, 5]

with multiprocessing.Pool(2) as p:

results = p.map(worker, nums)

print(results)

```

这段代码创建了一个包含2个进程的进程池,使用map方法将nums列表中的数据传递给进程池,进程池中的进程执行worker函数,返回结果保存在results列表中。

6. 使用Manager类管理共享状态

在多进程编程中,进程之间需要共享一些状态,例如共享内存、共享变量等。使用Manager类可以管理进程之间的共享状态,例如:

```python

import multiprocessing

def worker(d):

d['count'] += 1

if __name__ == '__main__':

with multiprocessing.Manager() as manager:

d = manager.dict()

d['count'] = 0

p1 = multiprocessing.Process(target=worker, args=(d,))

p2 = multiprocessing.Process(target=worker, args=(d,))

p1.start()

p2.start()

p1.join()

p2.join()

print(d['count'])

```

这段代码使用Manager类创建了一个字典对象,用于共享状态。在创建进程时,将字典对象作为参数传递给进程函数。进程函数通过修改字典对象来实现共享状态。

7. 总结

使用multiprocessing包可以方便地实现多进程编程,充分利用多核CPU,提高程序的运行效率。本文介绍了multiprocessing包的常用类和函数,包括Process类、Queue类、Pool类和Manager类。同时,还介绍了使用这些类和函数的示例代码。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行