python - forkserver 不在子进程中重用
问题描述
multiprocessing.forkserver.Forkserver
暴露ensure_running
方法。此方法的文档字符串说明以下内容:
def ensure_running(self):
'''Make sure that a fork server is running.
This can be called from any process. Note that usually a child
process will just reuse the forkserver started by its parent, so
ensure_running() will do nothing.
链接到源:https ://github.com/python/cpython/blob/master/Lib/multiprocessing/forkserver.py#L105
但是,以下代码片段似乎没有显示该行为:
from multiprocessing import set_start_method, forkserver
from multiprocessing.context import Process
import os
def child2():
print(f"in child2: pid={os.getpid()}, ppid={os.getppid()}, forkserver.pid={forkserver._forkserver._forkserver_pid}")
def child1():
p = Process(target=child2)
p.start()
p.join()
print(f"in child1: pid={os.getpid()}, ppid={os.getppid()}, forkserver.pid={forkserver._forkserver._forkserver_pid}")
def run():
p = Process(target=child1)
p.start()
p.join()
print(f"in run: pid={os.getpid()}, ppid={os.getppid()}, forkserver.pid={forkserver._forkserver._forkserver_pid}")
if __name__ == "__main__":
set_start_method("forkserver")
run()
输出以下内容:
in child2: pid=4378, ppid=4377, forkserver.pid=None
in child1: pid=4375, ppid=4374, forkserver.pid=4377
in run: pid=4372, ppid=2742, forkserver.pid=4374
主进程 (pid= 4372
) 产生一个 forkserver (pid= 4374
)。这个 forkserver forkschild1
生成了它自己的 forkserver,其 pid 为4377
.
我错过了什么吗?我希望child1
's forkserver 与 main 的 forkserver 具有相同的 pid。
解决方案
推荐阅读
- azure - 我可以找到随机 DevOps 服务组织的管理员吗?
- reactjs - React post 方法不适用于 fetch 方法
- spring - 如何使用 Spring WebFlux 执行顺序 API 调用并避免深度嵌套?
- c# - 计算值类型和数组组合的哈希码
- woocommerce - 木材中 Woocommerce 的自定义结帐页面
- javascript - 未捕获的类型错误:无法在完整日历中读取未定义的属性(读取“hasTime”)
- boxplot - 为什么汽车包中的 Boxplot 函数不返回所有异常值?
- google-sheets - 应用程序脚本 getValue 内容仅不是公式
- pandas - 如何在 mplfinance 的每条线上添加点(ohlcv 绘制为线)变化?
- julia - Julia中的结构继承