我有一个类似服务器的Python程序,它接收数据包,并根据数据包的类型处理它们。为此,我使用multiprocessing
模块生成了多个进程。我注意到垃圾收集在操作过程中会造成一些延迟,并且数据包不会在所需的时间范围内处理。我知道如何禁用垃圾收集:
import gc
gc.disable()
但是我的问题是,当涉及多个进程或线程时,Python如何处理垃圾收集?进程或线程的垃圾收集之间是否存在差异?我是否需要为每个进程/线程更改垃圾回收?或者,父进程/线程中的垃圾回收中的单个更改是否也负责处理所有子进程/线程?
我目前的情况使用Python 2.7但是我很想知道Python 2和Python 3是否相同。
答案 0 :(得分:3)
进程可以有多个线程。 垃圾收集在一个过程中起作用。
在支持fork的系统上:如果在一个进程中禁用垃圾收集然后将其分叉(=创建进程的副本),则还应在副本中禁用GC。
如果创建的新进程不是副本,则它们具有自己的垃圾回收配置。通过defaut他们的GC应该打开。
但是有很多库都有Process
类。我不知道他们做了什么。如果您使用os
生成新进程(而不是副本),那么它应该在启用GC的情况下运行。
一个流程GC的配置对其他GC的配置没有影响。进程是保护代码的边界。因此,一个流程中的任何内容都无法轻松地进入其他流程。