当我们需要同时执行多个任务时,使用多进程可以有效地利用计算资源,提高程序的执行效率。Python中提供了multiprocessing
模块,用于实现多进程编程。
multiprocessing
模块中的主要组件有:
-
Process
类:用于表示一个进程对象,可以通过创建Process
对象来创建新的进程。可以调用start()
方法启动进程,调用join()
方法等待进程的结束。 -
Queue
类:用于实现进程间通信(IPC),可以在多个进程之间安全地传递数据。可以通过put()
方法将数据放入队列,通过get()
方法从队列中获取数据。 -
Pool
类:用于管理一组工作进程,可以使用Pool
类构建进程池。可以使用apply()
方法、map()
方法等来提交任务给进程池,进程池会自动创建和管理工作进程。 -
Lock
类:用于实现进程间的互斥锁,以保证在同一时刻只有一个进程能够访问共享资源。可以使用acquire()
方法获取锁,使用release()
方法释放锁。
使用multiprocessing
模块实现多进程的思路如下:
-
导入
multiprocessing
模块,创建需要执行的任务函数。 -
在
__main__
部分,创建Process
对象,并指定执行的任务函数和传递的参数。 -
调用
start()
方法启动进程,进程开始执行任务。 -
使用
join()
方法等待进程执行完毕,以防止主进程在子进程结束前结束。
需要注意的是,在使用多进程时,每个进程都有独立的内存空间,所以进程之间的数据是相互独立的。如果需要在不同的进程间共享数据,可以使用Queue
类或者Manager
模块中的其他数据类型(如list
、dict
等)进行进程间通信。
另外,多进程编程还需要考虑到进程间的同步和互斥,防止多个进程同时访问共享资源,可以使用Lock
类来实现简单的互斥锁机制。
总结起来,使用multiprocessing
模块,我们可以方便地创建和管理多个进程,并实现进程间的通信和同步,从而实现多任务的并行执行。
下面给一个例子:
import multiprocessing
def worker(num):
"""子进程要执行的任务"""
print('Worker:', num)
if __name__ == '__main__':
num_processes = 4 # 指定要创建的进程数量
processes = []
for i in range(num_processes):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)
p.start()
for p in processes:
p.join()