Czytałem kilka podobnych postów na ten temat, ale wydaje mi się, że nie pomagają mi bezpośrednio. Jeśli faktycznie jest to duplikat postu, proszę skieruj mnie do wątku zawierającego rozwiązanie!OSError: [Errno 12] Nie można przydzielić pamięci z python subprocess.call
Zapisuję garść obrazów, a następnie wywołuję na nich ffmpeg z podprocesorem. Robię to kilka razy dla kolekcji różnych obrazów. Zasadniczo to właśnie robię:
from subprocess import call
for video in videos:
call(['ffmpeg', ..., '-i', video, video+'.mp4')])
W odosobnieniu to działa dobrze. Jednakże, gdy wykonuję również inne przetwarzanie przed tymi wywołaniami (nie w pętli, dosłownie po prostu utrzymywanie wartości w pamięci przed rozpoczęciem pętli), powoduje awarię z powodu błędu pamięci po wykonaniu kilku filmów (w rzeczywistości podczas robienia ostatniego jeden). Według this comment, subprocess.call widnieje/klonuje bieżący proces, co wydaje się oznaczać, że żąda alokacji pamięci równej temu, ile aktualnie mam w pamięci, co wydaje się być przesadą w stosunku do tego, co chcę zrobić w wywołaniu ffmpeg.
Jak mogę wywołać ffmpeg z poziomu Pythona bez pytania o przydzielenie niepotrzebnej ilości pamięci?
Odpowiedź tutaj jest consice i jasne: widły podproces proces i pamięć może wzrosnąć. Oto bardziej zaangażowane pytania i odpowiedzi, które również mogą pomóc: http://stackoverflow.com/questions/1367373/python-subprocess-popen-oserror-errno-12- cannon-allocate-memory podaj więcej szczegółów tym, którzy mają ten problem – Paul