我有一个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 并加入。我究竟做错了什么?
如果我从终端终止程序,我会收到此错误:
->File "threading.py", line 1070, in _wait_for_tstate_lock
elif lock.acquire(block, timeout):
KeyboardInterrupt:
编辑
要添加更多信息,当我启动程序时,它最初运行得很快,但随着时间的推移会变慢。随着程序变慢,RAM 消耗量增加,超过了我的 RAM 并填满了 Swap。如果没有多处理,您根本不会注意到任何 RAM 消耗,因为程序非常小。htop
仅显示 1 到 4 个进程同时运行。