如何跟踪python脚本的内存

如何跟踪python脚本的内存,python,memory-management,stackless,Python,Memory Management,Stackless,我们的系统只有一个翻译。许多用户脚本都通过这个解释器。我们希望对每个脚本的内存使用量设置一个上限。只有一个进程,该进程为每个脚本调用微线程。因此,由于我们只有一个解释器和一个进程,我们不知道如何限制每个脚本的内存使用。做这件事最好的方法是什么我认为根本不可能。您的问题意味着您的小任务所使用的内存是完全分离的,但情况可能并非如此。Python正在优化像整数这样的小对象。据我所知,例如,代码中的每个3都使用相同的对象,这不是问题,因为它是不可修改的。那么,如果您的两个微线程使用相同的小线程?整数,它

我们的系统只有一个翻译。许多用户脚本都通过这个解释器。我们希望对每个脚本的内存使用量设置一个上限。只有一个进程,该进程为每个脚本调用微线程。因此,由于我们只有一个解释器和一个进程,我们不知道如何限制每个脚本的内存使用。做这件事最好的方法是什么我认为根本不可能。您的问题意味着您的小任务所使用的内存是完全分离的,但情况可能并非如此。Python正在优化像整数这样的小对象。据我所知,例如,代码中的每个3都使用相同的对象,这不是问题,因为它是不可修改的。那么,如果您的两个微线程使用相同的小线程?整数,它们已共享内存-

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

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

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

每次你需要运行另一个脚本时,你甚至不需要杀死和复活解释器。汇集几个解释器,只杀死那些在运行脚本后超过某个内存阈值的解释器。如果需要,通过操作系统提供的方式限制解释器的内存消耗

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


是的,这可能比您当前的设置慢。但是从您对Python的使用来看,我认为在这些脚本中,您不会执行任何时间关键型计算。

我们的系统只有一个解释器。节省大量工作,得到一个具有多个解释器的真实系统。即使他使用了两个不同的python解释器,他们仍然至少会在Windows上共享DLL的代码;我认为所有其他操作系统也是如此;因此,为每个线程定义一个私有工作集是可能的——问题是python是否有能力做到这一点。可能不会。