簡體   English   中英

如何跟蹤python腳本的內存

[英]How to track memory for a python script

我們有一個只有一個解釋器的系統。 許多用戶腳本都通過此解釋器。 我們希望限制每個腳本的內存使用量。 只有進程,該進程為每個腳本調用tasklet。 因為我們只有一個解釋器和一個進程,所以我們不知道如何在每個腳本內存使用上設置上限。 做這個的最好方式是什么

我認為這根本不可能。 您的問題意味着您的tasklet使用的內存完全分離,可能並非如此。 Python正在優化像整數這樣的小對象。 據我所知,例如代碼中的每個3都使用相同的對象,這不是問題,因為它是可以改變的。 因此,如果兩個tasklet使用相同的(小?)整數,則它們已經共享內存。 ;-)

內存在OS進程級別分離。 沒有簡單的方法可以告訴哪個tasklet甚至特定對象屬於哪個線程。

此外,沒有簡單的方法來添加自定義簿記分配器,該分配器將分析哪個tasklet或線程正在分配一塊內存並防止分配過多。 它還需要插入垃圾收集代碼來折扣被釋放的對象。

除非您熱衷於編寫自定義Python解釋器,否則最好使用每個任務的進程。

每次需要運行另一個腳本時,甚至不需要殺死和重新生成解釋器。 匯集幾個解釋器,並且只在運行腳本后殺死那些超過某個內存閾值的解釋器。 如果需要,可以通過操作系統提供的方法限制解釋器的內存消耗。

如果需要在任務之間共享大量公共數據,請使用共享內存; 對於較小的交互,請使用套接字(根據需要使用高於它們的消息傳遞級別)。

是的,這可能比您當前的設置慢。 但是從你對Python的使用來看,我認為在這些腳本中你無論如何都不會做任何時間關鍵的計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM