在 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")
语句。
总的来说,使用 multiprocessing
模块来实现多进程编程非常方便,并且可以在多核 CPU 环境下发挥最佳性能。