本文共 1392 字,大约阅读时间需要 4 分钟。
在 Python 中实现多进程,有两种主要方法:一种是使用 os 模块的 fork 方法,另一种是使用 multiprocessing 模块。两种方法各有特点,适用于不同的场景。
os.fork 方法源自 Unix/Linux 操作系统,用于复制当前进程,创建子进程。与普通的函数调用不同,fork 方法会返回两次:
fork 后,返回子进程的进程 ID。fork 后,返回 0。os.getpid() 可以获取当前进程的 ID,而 os.getppid() 则获取父进程的 ID。以下是使用 os.fork 的示例代码:
import osif __name__ == '__main__': print('当前进程 ID:%s' % os.getpid()) pid = os.fork() if pid < 0: print('fork 失败') elif pid == 0: print('子进程 ID:%s' % os.getpid()) print('父进程 ID:%s' % os.getppid()) else: print('创建了一个子进程 ID:%s' % pid) 运行上述代码可以看到,父进程和子进程的行为是对称的。每个进程都可以独立运行,但它们共享同样的内存空间和文件描述符。
multiprocessing 模块提供了更高级的多进程管理功能。它的 Process 类允许创建和管理子进程。创建子进程时,只需传入一个目标函数和其参数即可。start() 方法用于启动进程,join() 方法用于等待子进程完成。
以下是使用 multiprocessing 模块的示例代码:
from multiprocessing import Processimport osdef run_proc(name): print('子进程 %s:%s' % (name, os.getpid()))if __name__ == '__main__': print('父进程 ID:%s' % os.getpid()) for i in range(5): print('将要启动一个进程') p = Process(target=run_proc, args=(str(i),)) p.start() print('等待所有进程完成') for p in Process.active_children(): p.join() print('所有进程已结束') 运行上述代码可以看到,父进程会创建五个子进程(每个子进程运行 run_proc 函数),然后等待所有子进程完成。每个子进程都会输出其进程 ID 和名称。
两种方法的选择取决于具体需求。如果需要跨平台支持,multiprocessing 是更好的选择。
转载地址:http://uiofk.baihongyu.com/