概念
目的:多核 CPU
时代,为了充分利用资源,依赖多任务并发编程技术提升程序性能和改善用户体验。
多任务并发编程方式:
- 多进程
- 多线程
- 多进程 + 多线程
进程:操作系统中执行的一个程序,一个任务就是一个进程。
线程:线程是最小的执行单元,一个线程相当于进程的子任务。
进程间通信方式:管道、信号、套接字、共享内存区等。
多进程
os
模块:使用fork()
调用实现多进程。multiprocessing
模块:实现跨平台多进程。Process
对象:实现多进程。Pool
对象:可以用进程池的方式批量创建子进程,Pool
的默认大小是CPU
的核数。Queue
对象:通过队列实现进程间通信。Pipes
对象:通过管道实现进程间通信。start
方法:表示启动进程。join
方法:表示等待进程执行结束。
1 | from random import randint |
1 | from multiprocessing import Process |
多线程
thread
模块:实现多线程
1 | import os |
Python 的 multiprocessing
模块就是跨平台版本的多进程模块。multiprocessing
模块提供了一个Process
类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束。
1 | from multiprocessing import Process |
创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process
实例,用start()
方法启动,这样创建进程比fork()
还要简单。join()
方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
Pool:如果要启动大量的子进程,可以用进程池的方式批量创建子进程,Pool
的默认大小是 CPU 的核数。
1 | from multiprocessing import Pool |
进程间通信:Process
之间肯定是需要通信的,操作系统提供了很多机制来实现进程间的通信。Python
的multiprocessing
模块包装了底层的机制,提供了Queue
、Pipes
等多种方式来交换数据。
1 | from multiprocessing import Process, Queue |