2012-04-22 11 views
9

W skrypcie w języku Python chcę ustawić limit pamięci dla określonego wywołania funkcji. Spojrzałem na how to limit heap size; jednak nie chcę ograniczać pamięci całego działającego procesu Pythona - tj. ustawiania limitu pamięci przed i po wywołaniu funkcji.Python: ustawianie limitu pamięci dla określonego wywołania funkcji

Czy istnieje sposób wywołania funkcji z określoną ilością pamięci, aby limit pamięci nie wpłynął na dzwoniącego?

+9

Otwórz nowy proces i ogranicz wielkość sterty. – JBernardo

+2

Albo, teoretycznie, możesz również sprawdzić bieżącą ramkę i rekurencyjnie zbudować drzewo z wszystkimi obiektami w nim i oszacować używaną pamięć, ale nie jest to proste. Sprawdź, jak działają narzędzia do profilowania pamięci, takie jak guppy.heapy. –

+5

Ale prawdziwe pytanie brzmi: dlaczego chcesz to zrobić? Nie ma w tym wbudowanej funkcji, więc może podchodzisz do problemu w niewłaściwy sposób. –

Odpowiedz

2

Nie, to niemożliwe. Python nie śledzi, które funkcje są odpowiedzialne za przydzielanie nowej pamięci, ani też nie robi libc, więc nie ma sposobu, aby ograniczyć wykorzystanie pamięci tylko przez jedną funkcję.

Aby to zrobić, musisz zmodyfikować język Python, aby użyć nowej funkcji do przydzielania pamięci, która wymaga określenia, jaka funkcja Pythona jest odpowiedzialna, aby mogła odrzucić alokację pamięci, jeśli ta funkcja się powiedzie. jego limit.

Jedynym sposobem na zrobienie tego byłoby wykonanie tej funkcji w oddzielnym procesie z ograniczoną pamięcią, jak powiedział @JBernardo.

Jeśli chodzi o wdrażanie piaskownic, już istnieją stosunkowo dobrze przetestowane implementacje. Czy istnieje jakiś powód, dla którego nie możesz ich użyć? W szczególności zobacz PyPy's sandboxed VM i Zope sandbox.

Powiązane problemy