Używam skryptu Perla przez moduł podprocesu w Pythonie na Linux. Funkcja uruchamiająca skrypt jest wywoływana kilka razy ze zmiennym wejściem.Dlaczego muszę używać .wait() z modułem podprocesowym Pythona?
def script_runner(variable_input):
out_file = open('out_' + variable_input, 'wt')
error_file = open('error_' + variable_input, 'wt')
process = subprocess.Popen(['perl', 'script', 'options'], shell=False,
stdout=out_file, stderr=error_file)
Jeśli jednak uruchomić tę funkcję, powiedzmy, dwa, wykonanie pierwszego procesu zatrzyma się, gdy rozpoczyna się drugi proces. Mogę uzyskać pożądane zachowanie, dodając po wywołaniu skryptu:
, więc nie utknąłem. Chcę jednak dowiedzieć się, dlaczego nie mogę uruchamiać skryptu przy użyciu podprocesu tyle razy, ile chcę, i skrypt powinien wykonywać te obliczenia równolegle, bez czekania na zakończenie każdego z nich.
UPDATE
Sprawca nie było tak ekscytujące: skrypt Perl stosowany wspólny plik, który został przepisany dla każdej realizacji.
Jednak lekcja, której się nauczyłam, polegała na tym, że śmieciarz nie usuwał procesu po uruchomieniu, ponieważ nie miało to żadnego wpływu na mój skrypt, kiedy go rozwiązałem.
czy jesteś pewien, że drugi się zakończy? Czy masz na myśli * to samo * wywołanie dwa razy (to samo 'variable_input')? – knitti
Drugi kończy się zgodnie z oczekiwaniami. Mam na myśli różne "variable_input". Na przykład "test_1" i "test_2". – Viktiglemma
co z próbą zachowania odniesienia do obu procesów, np. proces powracania i przechowywanie go w zmiennej? – knitti