Zajmuję się tworzeniem aplikacji w Pythonie na Ubuntu i używam zewnętrznych plików binarnych z poziomu Pythona przy użyciu podprocesu. Ponieważ te pliki binarne są generowane w czasie wykonywania i mogą być nieuczciwe, potrzebuję ścisłej kontroli ilości pamięci i czasu działania tych plików binarnych. Czy w jakiś sposób mogę ograniczyć lub monitorować wykorzystanie pamięci przez te programy binarne w czasie wykonywania? Naprawdę nie chciałbym używać czegoś takiego jak "ps" w podprocesie do tego celu.Sprawdź użycie pamięci podprocesu w Pythonie
Odpowiedz
Posiadanie numeru PID swojego podproces można przeczytać wszystkie informacje z proc file-system. Zastosowanie:
/Proc/[PID]/smaps (od Linux 2.6.14) Plik ten pokazuje zużycia pamięci każdego z mapowania procesu. Dla każdego z przekształceń istnieje szereg linii następująco:
lub
/Proc/[PID]/statm zawiera informacje o wykorzystaniu pamięci, mierzona na stronach.
Alternatywnie można ograniczyć środki, które można nabyć z podproces:
subprocess.Popen('ulimit -v 1024; ls', shell=True)
Kiedy dany limit pamięci wirtualnej jest osiągnięty proces nie powiedzie się z pamięci.
można wykorzystywać moduł Pythona resource ustawić limity przed tarłem swoją podproces.
Do monitoringu, resource.getrusage() da Ci zestawione informacji przez wszystkich podprocesów; jeśli chcesz zobaczyć informacje o poszczególnych podprocesach, możesz zrobić sztuczkę/proc w tym innym komentarzu (nieprzenośny, ale skuteczny), lub ustawić warstwę programu Python pomiędzy każdym podprocesem i dowiedzieć się jakiejś komunikacji (przenośnej, brzydkiej, delikatnie działającej).
dzięki Habbie, to dokładnie to, czego potrzebowałem. – Neo
- 1. Sprawdź użycie pamięci w haskell
- 2. Jak uzyskać środowisko z podprocesu w Pythonie
- 3. Właściwe użycie muteksów w Pythonie
- 4. Ponowne użycie zmiennych w Pythonie
- 5. Przykładowe użycie assert w Pythonie?
- 6. Definicja pamięci i użycie
- 7. Jak uzyskać kod powrotu i wynik z podprocesu w Pythonie?
- 8. Niebuforowany odczyt z procesu przy użyciu podprocesu w Pythonie
- 9. Użycie pamięci aplikacji Java
- 10. Ogranicz użycie pamięci?
- 11. Użycie pamięci Java BigDecimal?
- 12. Użycie pamięci struktury encji
- 13. Reduce użycie pamięci RabbitMQ
- 14. Sprawdź zainicjowaną zmienną w Pythonie
- 15. Wyjątek Reraise z podprocesu
- 16. Użycie pamięci ASP.NET dość wysokie
- 17. Jak ograniczyć użycie pamięci DEX
- 18. HSET kontra użycie pamięci SET?
- 19. Słownik vs użycie pamięci Hashtable
- 20. Kometa, użycie responseText i pamięci
- 21. Python list anomalne użycie pamięci
- 22. Śledź użycie pamięci w C++ i oceń zużycie pamięci
- 23. Użycie exec i eval w Pythonie
- 24. Praktyczne użycie operatorów odwróconych w Pythonie
- 25. w Pythonie użycie hierarchii dla findContours
- 26. Jak obliczyć użycie pamięci w Menedżerze zadań?
- 27. przechwytywanie stdout w czasie rzeczywistym z podprocesu
- 28. Jak uzyskać kod powrotu podprocesu?
- 29. sprawdź stan połączenia elasticsearch w pythonie
- 30. Sprawdź, czy plik jest otwarty w Pythonie
muszę wdrożyć to z poziomu Pythona. Tak więc musiałbym rozwidlić proces potomny, a jednocześnie uruchomić pętlę while, która utrzymuje monitorowanie/proc/(pid)/smaps plik. Czy nie jest jakiś inny sposób, np .: mogę przydzielić pamięć stałą dla podprocesu podrzędnego? Miałem nadzieję jakoś wykorzystać menedżera pamięci Pythona. – Neo
Dang, nigdy o tym nie myślałem. Tak, to powinno działać dobrze dla mnie. – Neo
ulimit jest przestarzały. Fragment strony podręcznika: "Ostrzeżenie: ta procedura jest przestarzała, zamiast tego użyj getrlimit (2), setrlimit (2) i sysconf (3)." – omikron