内存密集型Python程序

时间:2016-05-30 12:51:27

标签: python mongodb python-2.7

我最近被问到一个面试问题我很想知道他的答案,虽然我在面试过程中无法回答:鉴于用户A和用户B在ubuntu 12.04服务器上以非root用户身份运行他们的任务。用户A正在运行mongodb,内存使用率为52.2%。在python中是否有一个程序,用户B可以运行该程序,以便用户A程序自行终止或自行终止。

我的尝试:我尝试将非常大的文件作为用户B读入内存。但是,这样做,用户B的程序本身会被操作系统终止或终止。有没有办法以非root用户身份杀死另一个用户的内存密集型程序?

面试官给了我提示..他说,如果你的进程(用户B)比用户A更加内存密集,那么用户A的进程将在某个时候自动被杀死。但我无法理解如何设计这样一个内存密集型程序

1 个答案:

答案 0 :(得分:2)

大多数(全部?)现代操作系统都采用内存保护。通常,它们不允许一个进程访问另一个进程的内存。这可以防止内存繁重的应用程序使用分配其他进程的内存。一旦物理内存用完,内存繁重的应用程序的数据将被写入交换文件。一旦交换文件也满了,操作系统就会终止该过程。

因此,为了让UserB杀死UserA的进程,它必须耗尽剩余的可用内存并进行交换。一旦UserA的进程需要更多内存,操作系统就会终止它,以保护UserB的进程。

UserB很容易设计这个过程。只需生成并打开一个足够大的文件。用于打开文件的程序,如Python解释器,将加载内存中的内容。

kill_list = []
try:
    while True:
        kill_list.append(1)
except MemoryError:
    pass

应该这样做。如果没有操作系统杀死它,它将占用尽可能多的内存。现在等待......