python - 在 Python 中进行裸 os.fork() 调用的充分理由是什么?
问题描述
你能说出真正需要使用os.fork()
而不是 的情况multiprocessing
吗?
完整披露:
当有人提到os.fork()
时,通常会陷入“您不需要分叉,只需使用multiprocessing
”或仿射答案或评论中。我创建了这个问题,因此可以将其链接起来。事实上,我会分享我自己的答案。但是,如果您知道一种更好的方法来处理我的示例场景,请随时放弃 - 这将非常有用!
解决方案
假设你有一堂课Simulator
。它的目的是做一个非常复杂的模拟,你可以用方法“块”(逐步,或在一定的模拟时间)推进Simulator.advance(n)
。此外,您可以在调用Simulator.advance(n)
with 方法之间更改模拟中的参数Simulator.change(parameters)
:它们可能是例如风速、可用资源等。
以下两个陈述,很可能发生,也是正确的:
- 模拟计算成本高;
- 无论出于何种原因,您在天堂都没有机会
Simulator
序列化飞行中的实例。
现在,假设您需要模拟N
具有相同初始条件的不同场景,这些场景共享一个共同的第一次调用Simulator.advance(n)
,然后在每个场景中以不同的方式更改某些参数,然后为简短的、有区别的最终部分恢复模拟。由于计算成本非常高,您真的不想运行完全相同的第一部分N
时间。所以你要做的是运行第一部分,然后(利用进程内存的原始副本,os.fork()
以便不必序列化任何东西)你分叉N
时间,在每个子进程中选择不同的参数更改,然后收集最终的每个结果。
推荐阅读
- javascript - 禁用使用 font-awesome 创建的复选框
- excel - 如何清除excel中刷新宏中的格式规则?
- c# - 如何在 UWP 应用程序中使用 PuppeteerSharp?
- python-3.x - 如何在本地启动一个启用 docker 的 python 函数
- c++ - iOS OpenCV:与 ORB 匹配的图像导致 EXC_BAD_ACCESS
- node.js - 上传的图像应该存储在服务器上还是响应?
- visual-studio-2017 - 使用 TotalPageCount 后无法保存报告
- django - 我需要使用 django_cron 的帮助
- javascript - 如何通过创建对象从 aspx 页面调用 jQuery-plugin 函数?
- jquery - 如何在 jquery 中切换道具“禁用”