概念
目的:多核 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 |