垃圾收集如何与多个正在运行的进程/线程一起使用?

时间:2014-04-24 15:13:47

标签: python python-2.7 garbage-collection multiprocessing

我有一个类似服务器的Python程序,它接收数据包,并根据数据包的类型处理它们。为此,我使用multiprocessing模块生成了多个进程。我注意到垃圾收集在操作过程中会造成一些延迟,并且数据包不会在所需的时间范围内处理。我知道如何禁用垃圾收集:

import gc
gc.disable()

但是我的问题是,当涉及多个进程或线程时,Python如何处理垃圾收集?进程或线程的垃圾收集之间是否存在差异?我是否需要为每个进程/线程更改垃圾回收?或者,父进程/线程中的垃圾回收中的单个更改是否也负责处理所有子进程/线程?

我目前的情况使用Python 2.7但是我很想知道Python 2和Python 3是否相同。

1 个答案:

答案 0 :(得分:3)

进程可以有多个线程。 垃圾收集在一个过程中起作用。

在支持fork的系统上:如果在一个进程中禁用垃圾收集然后将其分叉(=创建进程的副本),则还应在副本中禁用GC。

如果创建的新进程不是副本,则它们具有自己的垃圾回收配置。通过defaut他们的GC应该打开。

但是有很多库都有Process类。我不知道他们做了什么。如果您使用os生成新进程(而不是副本),那么它应该在启用GC的情况下运行。

一个流程GC的配置对其他GC的配置没有影响。进程是保护代码的边界。因此,一个流程中的任何内容都无法轻松地进入其他流程。