当前位置: 技术文章>> 100道python面试题之-如何使用Python的multiprocessing模块创建进程?

文章标题:100道python面试题之-如何使用Python的multiprocessing模块创建进程?
  • 文章分类: 后端
  • 5497 阅读

在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模块中的ValueArrayManager等类。
  • 进程启动和结束的开销比线程大,因此,对于I/O密集型或等待密集型任务,可以考虑使用threading模块。但对于CPU密集型任务,multiprocessing模块是更好的选择。
推荐文章