我在读python上关于这两个人的描述
产卵 父进程启动一个新的python解释器进程。子进程只继承运行process ()方法所需的资源。特别是,来自父进程的不必要的文件描述符和句柄将不会被继承。使用此方法启动进程比使用叉或叉服务器要慢得多。可在Unix和Windows上使用。Windows和macOS上的默认设置。 叉 父进程使用os.fork()对Python解释器进行分叉。子进程开始时实际上与父进程相同。父进程的所有资源都由子进程继承。请注意,安全分叉多线程进程是有问题的。仅在Unix上可用。Unix的默认设置。
我的问题是:
发布于 2020-09-28 05:25:27
是的,要快得多。内核可以克隆整个进程,并且只将修改过的内存页作为一个整体进行复制。将资源输送到新进程并从零开始启动解释器是不必要的。
分叉在现代内核上只做“抄写”,它只影响内存页,这实际上是改变的。但要注意的是,“写”已经包含了对CPython中的对象的迭代。这是因为对象的引用计数会增加。
如果长时间运行的进程中有大量的小对象在使用,这可能意味着您浪费更多的内存,而不是使用派生。有趣的是,我还记得Facebook声称他们的Python进程从“叉”切换到“产卵”,内存使用量大大减少了。
发布于 2021-02-09 04:38:01
在3 多处理启动方法之间有一种权衡
set_forkserver_preload()方法预加载一些模块。注意使用无证方法(尤指无证方法)。在Python3.7.0中的bug修复之前。
因此,叉服务器是快速、紧凑和安全的,但是它更复杂,而且没有很好的文档化的。这些文档并不是很好,所以我结合了来自多个来源的信息,并做出了一些推论。对任何错误都要做评论。
https://stackoverflow.com/questions/64095876
复制相似问题