Mam aplikację Python intensywnie wykorzystującą pamięć (od setek MB do kilku GB).
Posiadam kilka BARDZO MAŁYM plików wykonywalnych systemu Linux, do uruchomienia głównej aplikacji, np.Opis błędów przydziału widżetów i pamięci w języku Python
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Kiedy uruchamiam tych narzędzi zewnętrznych (raz, na końcu długiego biegu głównego procesu) używając subprocess.Popen
ja czasami OSError: [Errno 12] Cannot allocate memory
.
Nie rozumiem, dlaczego ... Żądany proces jest mały!
System ma wystarczającą ilość pamięci dla wielu innych powłok.
Używam Linuksa (Ubuntu 12.10, 64 bity), więc domyślam się, że podprocedie nazywają się Fork.
Widelec rozwidla mój istniejący proces, podwajając w ten sposób ilość zużywanej pamięci i nie działa?
Co stało się z "kopią przy pisaniu"?
Czy mogę utworzyć nowy proces bez widelca (lub przynajmniej bez kopiowania pamięci - rozpoczęcie od nowa)?
pokrewne:
The difference between fork(), vfork(), exec() and clone()
fork() & memory allocation behavior
Python memory allocation error using subprocess.Popen
[Czy znasz tę odpowiedź na powiązane pytanie] (http://stackoverflow.com/a/13329386/4279)? – jfs
Mam, dzięki. Istnieje kilka cennych sposobów obejścia tego problemu, z których część mogę wykorzystać. Miałem nadzieję na prawdziwe rozwiązanie - możliwość odrodzenia się nowego procesu z poziomu Pythona, który nie kopiuje całej pamięci procesu a la fork. –