• 周二. 2月 7th, 2023

Python 多进程编程的使用详解

在 Python 中,可以使用 multiprocessing 模块来实现多进程编程。

这个模块提供了一个 Process 类来表示一个进程对象,以及一些其他的工具,如队列、共享内存等,用于在进程之间进行通信和同步。

下面是一个简单的例子,展示了如何使用 multiprocessing 模块来创建一个新进程并运行一个函数:





import multiprocessing

def foo(n):
    print(f"Started process {n}")
    for i in range(10000000):
        pass
    print(f"Finished process {n}")

if __name__ == "__main__":
    process1 = multiprocessing.Process(target=foo, args=(1,))
    process2 = iprocessing.Process(target=foo, args=(2,))
    process1.start()
    process2.start()
    process1.join()
    process2.join()
    print("All processes finished")

在上面的代码中,我们创建了两个进程,分别调用 foo 函数,然后使用 start() 方法启动它们。最后,使用 join() 方法等待所有进程完成。

注意,在使用 multiprocessing 模块时,通常会在代码的最后加上一个判断语句 if __name__ == "__main__":。这是因为,当我们在命令行中运行一个 Python 文件时,它会被作为一个模块导入到另一个 Python 程序中。在这种情况下,如果我们直接运行模块,那么代码块 if __name__ == "__main__": 下的语句会被执行。如果我们从另一个 Python 程序中导入这个模块,那么代码块 if __name__ == "__main__": 下的语句就不会被执行。

这个机制可以让我们在导入模块的时候,只导入模块中的函数和变量,而避免执行整个模块中的代码。

例如,我们可以在另一个 Python 程序中这样导入上面的模块:





import multiprocessing

process1 = iprocessing.Process(target=foo, args=(1,))
process2 = iprocessing.Process(target=foo, args=(2,))
process1.start()
process2.start()
process1.join()
process2.join()

在这种情况下,我们只会创建两个进程并启动它们,而不会执行 print("All processes finished") 语句。

阅读  Python 日志记录的用法详解

总的来说,使用 multiprocessing 模块来实现多进程编程非常方便,并且可以在多核 CPU 环境下发挥最佳性能。