垃圾收集在多个进程/线程中如何工作?

8 投票
1 回答
1573 浏览
提问于 2025-04-18 04:06

我有一个像服务器一样的Python程序,它接收数据包,并根据数据包的类型进行处理。为此,我使用了multiprocessing模块创建了多个进程。我注意到垃圾回收在运行时会导致一些延迟,数据包没有在预期的时间内处理完。我知道如何关闭垃圾回收:

import gc
gc.disable()

不过,我想问的是,当有多个进程或线程时,Python是如何处理垃圾回收的?进程和线程的垃圾回收有什么不同吗?我需要为每个进程或线程单独调整垃圾回收吗?还是说在父进程或父线程中对垃圾回收的单一调整就能处理所有子进程或子线程的垃圾回收?

我目前使用的是Python 2.7,但我也想知道Python 2和Python 3在这方面是否一样。

相关问题:

1 个回答

3

一个程序可以有多个线程。垃圾回收是在一个程序内部进行的。

在支持“分叉”的系统上:如果你在一个程序中关闭了垃圾回收,然后进行分叉(也就是创建这个程序的一个副本),那么在这个副本中,垃圾回收也应该是关闭的。

如果创建的新程序不是副本,那么它们会有自己的垃圾回收设置。默认情况下,它们的垃圾回收应该是开启的。

不过,有很多库里有一个叫 Process 的类。我不能确定它们具体是干什么的。如果你使用 os 来生成一个新的程序(不是副本),那么它应该是开启垃圾回收的。

一个程序的垃圾回收设置不会影响到另一个程序的设置。程序之间是有界限的,这样可以保护代码不互相干扰。所以,一个程序里的东西是无法轻易访问到另一个程序的。

撰写回答