Python 3.x Python:杀死池中的所有进程

Python 3.x Python:杀死池中的所有进程,python-3.x,multiprocessing,application-pool,daemons,Python 3.x,Multiprocessing,Application Pool,Daemons,我有一个创建多个对象的函数foo()。在我的程序运行期间,这个函数被调用了好几次。为了加速我的代码,我想让foo()创建一组并行计算新对象的进程 def foo(self): pool = multiprocessing.Pool() self.nodes = pool.map(self._create_node, self.args) pool.close() pool.join() def _create_node(self, args):

我有一个创建多个对象的函数
foo()
。在我的程序运行期间,这个函数被调用了好几次。为了加速我的代码,我想让
foo()
创建一组并行计算新对象的进程

def foo(self):
    pool = multiprocessing.Pool()
    self.nodes = pool.map(self._create_node, self.args)
    pool.close()
    pool.join()

 def _create_node(self, args):
        n = Node(args)
        return n
这在理论上是可行的,但在调用了几次
foo()
之后,我的电脑就死机了。我认为在调用
foo()
后,进程不会被终止,尽管我调用了close和join。我做错了什么

如果我从终端终止程序,我会得到以下错误:

->File "threading.py", line 1070, in _wait_for_tstate_lock
    elif lock.acquire(block, timeout):

KeyboardInterrupt: 
编辑 为了补充更多信息,当我启动程序时,它最初运行得很快,但随着时间的推移,速度会减慢。随着程序速度的减慢,RAM消耗量增加,超过我的RAM并填满交换空间。如果没有多处理,您根本不会注意到任何RAM消耗,因为程序非常小<代码>htop只显示1到4个进程同时运行。

试试看

def foo(self):
    with multiprocessing.Pool() as pool:
        result = pool.map_async(self._create_node, self.args)
        try:
             self.nodes = result.get(300) #get the result or throws a timeout exception after 300 seconds
        except:
             pool.terminate()
您不需要关闭()池,因为它是自动调用的


编辑超时

我尝试了您的代码,但这导致了相同的问题
htop
向我显示了满是python执行的页面。我尝试了您的编辑,但在收到结果之前无法终止该过程。我如何在进程完成计算后终止它?只需删除get()和call pool.terminate()中的可选超时(不在except块中)。但是我建议现在我的电脑不再冻结了。但是,调用
foo()
的频率越高,计算速度就越慢。是否异步调用foo()?