推荐答案
// www.javascriptcn.com code example
import multiprocessing
def worker_function(name):
print(f"Worker {name} is running")
if __name__ == "__main__":
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker_function, args=(i,))
processes.append(p)
p.start()
for p in processes:
p.join()本题详细解读
多进程的概念
在 Python 中,多进程是指通过创建多个进程来并行执行任务。每个进程都有自己独立的内存空间,因此多进程可以充分利用多核 CPU 的计算能力,适合 CPU 密集型任务。
multiprocessing 模块
Python 的 multiprocessing 模块提供了创建和管理进程的工具。它允许你创建多个进程,每个进程都可以独立执行任务。
创建进程
使用 multiprocessing.Process 类可以创建一个新的进程。你需要指定 target 参数来指定进程要执行的函数,以及 args 参数来传递函数所需的参数。
p = multiprocessing.Process(target=worker_function, args=(i,))
启动进程
调用 start() 方法启动进程。进程启动后,会立即开始执行 target 函数。
p.start()
等待进程结束
使用 join() 方法可以等待进程执行完毕。这样可以确保主进程在所有子进程完成后再继续执行。
p.join()
进程池
multiprocessing 模块还提供了 Pool 类,用于管理多个进程的池。你可以使用 Pool 来并行执行多个任务。
from multiprocessing import Pool
def worker_function(name):
print(f"Worker {name} is running")
if __name__ == "__main__":
with Pool(5) as p:
p.map(worker_function, range(5))进程间通信
multiprocessing 模块提供了多种进程间通信的方式,如 Queue、Pipe 和 Manager 等。这些工具可以帮助你在多个进程之间共享数据。
// www.javascriptcn.com code example
from multiprocessing import Process, Queue
def worker_function(q):
q.put("Hello from worker")
if __name__ == "__main__":
q = Queue()
p = Process(target=worker_function, args=(q,))
p.start()
print(q.get())
p.join()注意事项
- 在 Windows 系统上,使用
multiprocessing模块时,必须将代码放在if __name__ == "__main__":块中,以避免子进程递归创建。 - 多进程编程可能会增加程序的复杂性,特别是在处理共享资源时,需要注意进程间的同步和通信问题。