我们的系统只有一个解释器。许多用户脚本都通过此解释器。我们希望限制每个脚本的内存使用量。只有进程,该进程为每个脚本调用tasklet。因为我们只有一个解释器和一个进程,所以我们不知道如何在每个脚本内存使用上设置上限。什么是最好的方法
答案 0 :(得分:3)
我认为这根本不可能。您的问题意味着您的tasklet使用的内存完全分离,可能并非如此。 Python正在优化像整数这样的小对象。据我所知,例如代码中的每个3
都使用相同的对象,这不是问题,因为它是可以改变的。因此,如果两个tasklet使用相同的(小?)整数,则它们已经共享内存。 ; - )
答案 1 :(得分:0)
内存在操作系统进程级别分离。没有简单的方法来告诉哪个tasklet甚至特定对象属于哪个线程。
此外,没有简单的方法来添加自定义簿记分配器,该分配器将分析哪个tasklet或线程正在分配一块内存并防止分配过多。它还需要插入垃圾收集代码来折扣被释放的对象。
除非您热衷于编写自定义Python解释器,否则最好使用每个任务的进程。
每次需要运行另一个脚本时,甚至不需要杀死和重新生成解释器。汇集几个解释器,并且只在运行脚本后杀死那些超过某个内存阈值的解释器。如果需要,可以通过操作系统提供的方法限制解释器的内存消耗。
如果您需要在任务之间共享大量公共数据,请使用共享内存;对于较小的交互,请使用套接字(根据需要使用超过它们的消息传递级别)。
是的,这可能比您当前的设置慢。但是从你对Python的使用来看,我认为在这些脚本中你无论如何都不会做任何时间关键的计算。