在Python中,multiprocessing
模块允许你并行地运行多个进程。这对于执行CPU密集型任务特别有用,因为Python的全局解释器锁(GIL)会限制多线程在执行CPU密集型任务时的并行性。使用multiprocessing
模块创建进程的基本步骤如下:
1. 导入multiprocessing
模块
首先,你需要从Python的标准库中导入multiprocessing
模块。
import multiprocessing
2. 定义目标函数
你需要定义一个函数,该函数将在新的进程中执行。这个函数将作为新进程的目标。
def worker(num):
"""线程工作函数"""
print(f'Worker: {num}')
3. 创建Process
实例
然后,你可以使用multiprocessing.Process
类来创建进程的实例。你需要将目标函数(以及任何必要的参数)传递给Process
的构造函数。
if __name__ == '__main__':
# 创建一个Process实例
p = multiprocessing.Process(target=worker, args=(1,))
注意:if __name__ == '__main__':
这一行代码非常关键,它用于防止在Windows上运行时出现无限递归创建进程的问题。
4. 启动进程
通过调用Process
实例的start()
方法来启动进程。
p.start()
5. 等待进程完成
如果需要等待进程完成,可以调用Process
实例的join()
方法。这将会阻塞当前的主线程,直到调用了join()
的进程执行完毕。
p.join()
完整示例
将上述步骤整合到一个完整的示例中:
import multiprocessing
def worker(num):
"""线程工作函数"""
print(f'Worker: {num}')
if __name__ == '__main__':
# 创建一个Process实例
p = multiprocessing.Process(target=worker, args=(1,))
# 启动进程
p.start()
# 等待进程完成
p.join()
print("主程序继续执行")
注意事项
- 当使用
multiprocessing
模块时,确保你的代码在if __name__ == '__main__':
块内执行,特别是在Windows系统上。 - 进程之间的数据不是共享的,与线程不同。如果你需要在进程之间共享数据,可以使用
multiprocessing
模块中的Value
、Array
、Manager
等类。 - 进程启动和结束的开销比线程大,因此,对于I/O密集型或等待密集型任务,可以考虑使用
threading
模块。但对于CPU密集型任务,multiprocessing
模块是更好的选择。