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