Uruchamiam Python 2.7 na maszynie Linux z 16 GB pamięci RAM i 64-bitowym systemem operacyjnym. Skrypt Pythona, który napisałem, może załadować zbyt wiele danych do pamięci, co spowalnia maszynę aż do momentu, w którym nie mogę nawet zabić procesu.Ogranicz użycie pamięci?
Chociaż mogę ograniczyć pamięć wywołując:
ulimit -v 12000000
w mojej skorupie przed uruchomieniem skryptu, chciałbym dołączyć ograniczający opcję w samym skrypcie. Wszędzie, gdzie wyglądałem, moduł resource
jest cytowany jako mający tę samą moc, co ulimit
. Ale wołanie:
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))
na początku mojego skryptu nie robi absolutnie nic. Nawet ustawienie wartości zaledwie 12000 nigdy nie spowodowało awarii. Próbowałem tego samego z RLIMIT_STACK
, a także z tym samym wynikiem. Co ciekawe, dzwonienie pod numer:
import subprocess
subprocess.call('ulimit -v 12000', shell=True)
nic nie robi.
Co robię źle? Nie mogłem znaleźć żadnych rzeczywistych przykładów użycia online.
Czy jest miejsce na zwiększenie wydajności pamięci? – TigerhawkT3
Jest, ale to zajmie trochę czasu. W tej chwili muszę go przetestować i upewnić się, że nie wyłącza komputera. A posiadanie pamięci bezpiecznej dla pamięci przyda się również później. – Arne
Od kiedy jest w Pythonie 2.7, co powiesz na przejście na Python 3 i użycie konwertera 2 na 3 w twoim programie? Python 3 ma kilka ulepszeń wydajności w stosunku do Python 2, z których niektóre są związane z pamięcią. – TigerhawkT3