python - 如何限制 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 阻止我使用多线程而不是多处理
解决方案
推荐阅读
- r - 每行的调色板从低到高
- javascript - 如何从提交表单中获取输入值并存储在 redux 存储变量中?
- swift - 使用 2 个条件过滤 UITableView 中的领域数据
- c# - 在这种情况下,垃圾收集器是否重新收集了该对象?
- c++ - c++-将大文件记录处理到cpp容器中的最有效方法
- java - 在数组列表中查找重复值并打印重复值
- elixir - Phoenix中常用逻辑在哪里写
- reactjs - 在 react-plotly.js 中将绘图保存为 png 文件?
- java - 如何在 Docker 映像中安装 Java 9 和 Gradle
- kubernetes - kubernetes:在 Pod 内访问 Ingress