首页 > 解决方案 > 如何限制 Python 中的进程数量以确保导入库的内存安全?

问题描述

警告!不要尝试运行示例代码,它可能会导致您的整个计算机崩溃!

我有一个类被编写来处理一些涉及其他几个模块的复杂计算:

# Some required libraries for calculation
import matplotlib.pyplot as plt
...

# Class to handle a single calculation
class B():

    def __init__(self, arg):
        self.arg = arg

    # Some long, complex calculation
    def Run(self):
        return self.arg**2

我希望能够使用多处理模块以不同的输入多次运行此计算,然后一起处理所有结果。我有另一堂课来做这件事:

import multiprocessing as mp
from test import B

# Class to run lots of calculations and process results.
class A():

    def RunProcess(self, arg):
        b = B(arg)
        return b.Run()

    def Run(self, max_processes):
        pool = mp.Pool(max_processes)
        results = pool.imap(self.RunProcess, [i for i in range(10000)])
        # Do something with results.
        pass

if __name__ == '__main__':
    a = A()
    a.Run(40)

我的问题是我在共享计算机集群上执行此操作,并且为每个进程导入其他库会占用大量内存,如果其他人正在运行计算,则会导致计算机严重崩溃。有没有比仅仅限制进程数量更好的方法来使这段代码内存安全?

一些注意事项:

Try/except 块似乎没有按预期工作,我读过这与底层 C 实现有关。

我已将进口限制在我认为计算的最低限度

matplotlib 阻止我使用多线程而不是多处理

标签: pythonmemory-managementimportmultiprocessingmemory-efficient

解决方案


推荐阅读