29

为什么多处理模块在被“冻结”生成windows可执行文件时需要调用特定函数才能工作?

4

1 回答 1

31

原因是fork()在 Windows 上缺少(这并不完全正确)。正因为如此,在 Windows 上,fork 是通过创建一个新进程来模拟的,在这个新进程中,在 Linux 上正在子进程中运行的代码正在运行。由于代码要在技术上不相关的进程中运行,因此必须在运行之前将其交付到那里。它的交付方式是首先将其腌制,然后通过管道从原始流程发送到新流程。此外,这个新进程被告知它必须运行通过管道传递的代码,方法是将命令行参数传递给它。如果你看一下实现--multiprocessing-forkfreeze_support()它的任务是检查它正在运行的进程是否应该运行通过管道传递的代码。

于 2013-08-12T20:17:38.033 回答