首页 > 解决方案 > 在 Python 中进行裸 os.fork() 调用的充分理由是什么?

问题描述

你能说出真正需要使用os.fork()而不是 的情况multiprocessing吗?

完整披露: 当有人提到os.fork()时,通常会陷入“您不需要分叉,只需使用multiprocessing”或仿射答案或评论中。我创建了这个问题,因此可以将其链接起来。事实上,我会分享我自己的答案。但是,如果您知道一种更好的方法来处理我的示例场景,请随时放弃 - 这将非常有用!

标签: pythonpython-multiprocessing

解决方案


假设你有一堂课Simulator。它的目的是做一个非常复杂的模拟,你可以用方法“块”(逐步,或在一定的模拟时间)推进Simulator.advance(n)。此外,您可以在调用Simulator.advance(n)with 方法之间更改模拟中的参数Simulator.change(parameters):它们可能是例如风速、可用资源等。

以下两个陈述,很可能发生,也是正确的:

  • 模拟计算成本高;
  • 无论出于何种原因,您在天堂都没有机会Simulator序列化飞行中的实例。

现在,假设您需要模拟N具有相同初始条件的不同场景,这些场景共享一个共同的第一次调用Simulator.advance(n),然后在每个场景中以不同的方式更改某些参数,然后为简短的、有区别的最终部分恢复模拟。由于计算成本非常高,您真的不想运行完全相同的第一部分N时间。所以你要做的是运行第一部分,然后(利用进程内存的原始副本,os.fork()以便不必序列化任何东西)你分叉N时间,在每个子进程中选择不同的参数更改,然后收集最终的每个结果。


推荐阅读