4

我们有一个只有一个口译员的系统。许多用户脚本来自这个解释器。我们想限制每个脚本的内存使用量。只有进程,并且该进程为每个脚本调用 tasklet。因此,由于我们只有一个解释器和一个进程,我们不知道如何限制每个脚本的内存使用量。做这个的最好方式是什么

4

2 回答 2

3

我认为这根本不可能。您的问题意味着您的小任务使用的内存是完全分开的,情况可能并非如此。Python 正在优化像整数这样的小对象。据我所知,例如3,您的代码中的每个都使用相同的对象,这不是问题,因为它是不可变的。因此,如果您的两个小任务使用相同的(小?)整数,它们已经共享内存。;-)

于 2011-09-09T20:49:39.497 回答
0

内存在操作系统进程级别分离。没有简单的方法可以判断特定对象属于哪个 tasklet,甚至属于哪个线程。

此外,没有简单的方法可以添加自定义簿记分配器来分析哪个 tasklet 或线程正在分配一块内存并防止分配过多。它还需要插入垃圾收集代码以对释放的对象进行折扣。

除非您热衷于编写自定义 Python 解释器,否则每个任务使用一个进程是您最好的选择。

您甚至不需要在每次需要运行另一个脚本时杀死并重新生成解释器。汇集几个解释器,只杀死那些在运行脚本后超出特定内存阈值的解释器。如果需要,通过 OS 提供的方式限制解释器的内存消耗。

如果需要在任务之间共享大量的公共数据,使用共享内存;对于较小的交互,请使用套接字(根据需要在它们之上具有消息传递级别)。

是的,这可能比您当前的设置慢。但是从你对 Python 的使用来看,我想在这些脚本中你无论如何都不会做任何时间关键的计算。

于 2011-09-09T21:19:54.203 回答