Mam taki kod
import multiprocessing as mp
processes = []
for i in range(10):
p = mp.Process(target=my_func, args=args)
processes.append(p)
p.start()
for p in processes:
p.join()
Jeśli w my_func
jest błąd, który powoduje awarię wszystkich wątków, chcę, aby mój proces nadrzędny wykrył to i również zgłosił wyjątek. Jak mogę wykryć, czy proces zakończył się poprawnie po dołączeniu do procesów?
2 odpowiedzi
Przeczytaj wartość procesu 'exitcode
:
None
jeśli proces jeszcze się nie zakończył.0
jeśli proces zakończył się pomyślnie.N
jeśli proces wystąpił błąd i zakończył działanie z kodem N.-N
jeśli proces został zabity sygnałemN
. (np. -15 jeśli zabity przezSIGTERM
)
Na przykład w głównym procesie:
for p in processes:
p.join()
if p.exitcode > 0:
raise ValueError(f'a process exited with code {p.exitcode}')
A w twojej pracy:
try:
do_something()
except KnownError as _:
exit(my_known_error_code)
Kod zakończenia możesz sprawdzić, dzwoniąc pod numer join()
.
Na przykład:
for p in processes:
p.join()
if p.exitcode is not 0:
exit(1)
Odniesienie:
Podobne pytania
Powiązane pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.