为什么这些Python服务器进程会累积?

为什么这些Python服务器进程会累积?,python,multiprocessing,python-multiprocessing,Python,Multiprocessing,Python Multiprocessing,忽略实际实用程序,我有以下类: from multiprocessing import Manager import threading class MgrStaticTarget(object): def __init__(self): self._mgr = Manager() self._thd = threading.Thread(target=self.async_targ) @staticmethod def async

忽略实际实用程序,我有以下类:

from multiprocessing import Manager
import threading


class MgrStaticTarget(object):

    def __init__(self):
        self._mgr = Manager()
        self._thd = threading.Thread(target=self.async_targ)

    @staticmethod
    def async_targ():
        pass

class MgrInstanceTarget(object):

    def __init__(self):
        self._mgr = Manager()
        self._thd = threading.Thread(target=self.async_targ)

    def async_targ(self):
        pass
我在观察我不理解的行为。以以下方式使用Python shell重复实例化MgrInstanceTarget时:

i = MgrInstanceTarget()
i = MgrInstanceTarget()
i = MgrInstanceTarget()
i = MgrInstanceTarget()
multiprocessing.Manager服务器进程(或者至少我认为它们来自于此)正在积累


但是,如果我以相同的方式实例化MgrStaticTarget,则服务器进程不会累积。唯一存在的进程是最新的Manager服务器进程和python shell的进程。这里发生了什么?

我认为如果使用静态目标,不会创建多个实例,因为所有实例都指向同一个目标,而在另一种情况下,会多次创建该类。。。对此不太确定……您为类的每个实例创建
管理器有什么特殊原因吗?我只需要创建一个全局
管理器
,然后让每个实例使用相同的
管理器
来创建共享实例。您会看到
管理器
进程与
管理器InstanceTarget
累积,因为垃圾收集器没有运行来清理旧实例。如果运行
importgc;gc.collect()
,它们将消失。这实际上是我所期望的行为。也就是说,我不知道为什么您在
mgrstictarget
中没有看到这种行为;即使我完全禁用了垃圾收集器,我也看不到进程与该对象一起累积。@dano谢谢你的建议。回答你的第一个问题,不,这不是一个很好的理由:)。我将管理器向上移动到类名称空间,并且,正如预期的那样,没有更多的进程累积。