2012-03-15 23 views
5

Mam plik wykonywalny pod Linuksem. Mam 8 procesorów rdzeniowych. Chcę uruchomić 8 różnych instancji tego samego pliku wykonywalnego z różnymi argumentami.jak uruchomić kilka plików wykonywalnych za pomocą Pythona?

Próbowałem

 os.system("process_name args") 

nie zwraca aż proces zostanie zakończony.

Chcę rozpocząć 8 różnych procesów z pytona

Jeśli ktoś może mi pomóc proszę.

Thanks a lot

+0

Czy te procesy gwarantują, że są programami w języku Python, czy też chcesz uruchomić ogólne programy dowolnego typu? –

+0

Szukam ogólne – Shan

+0

mogą być, ale niekoniecznie procesami Pythona – Shan

Odpowiedz

6

myślę szukasz dla Popen obiektów z modułem subprocess.

Uwaga: jeśli chcesz przekierować operacje wejścia/wyjścia do iz tego procesu, ten scenariusz staje się skomplikowany, ponieważ zalecanym sposobem jest wywołanie .communicate(), którego nie będziesz w stanie użyć, jeśli chcesz zarządzać wieloma przetwarza jednocześnie. W systemach UNIX-owych, rury mogą być przekazywane do wywołania systemowego select(), dzięki czemu można użyć modułu select do wykonania operacji we/wy. To nie zadziała w systemie Windows, ponieważ implementacja select() akceptuje tylko uchwyty gniazd.

+0

wielkie dzięki za odpowiedź. Nie chcę, aby procesy komunikowały się ze sobą. Ale powinien po prostu działać samodzielnie. W takim przypadku Popen jest właściwą opcją? – Shan

+1

'komunikacji()' nie jest dla procesów komunikujących się ze sobą. Jeśli przekierowujesz wejścia/wyjścia przez potoki, tylko proces nadrzędny (twój program w języku Python) "komunikuje się" ze swoimi dziećmi. Jeśli nie przekierujesz procesów I/O procesów potomnych lub nie przekierujesz ich do plików, nie będziesz miał "problemu komunikacyjnego" i możesz po prostu '.poll()' i '.returncode' sprawdzić, czy proces się zakończył. –

+6

'Popen' jest właściwym rozwiązaniem dla prawie wszystkich rozwiązań wykorzystujących procesy potomne za pomocą Pythona. –

Powiązane problemy