os._exit (1) не убивает недемонические родственные процессы - PullRequest
0 голосов
/ 01 мая 2019

Я пишу скрипт на python, который имеет 2 дочерних процесса.Основная логика происходит в одном процессе, и другой процесс ждет некоторое время, а затем убивает основной процесс, даже если логика не выполнена.

Я прочитал, что вызов os_exit (1) останавливает интерпретатор, поэтому весь сценарийубит автоматически.Я использовал его, как показано ниже:

import os

from multiprocessing import Process, Lock
from multiprocessing.sharedctypes import Array

# Main process
def main_process(shared_variable):
    shared_variable.value = "mainprc"
    time.sleep(20)
    print("Task finished normally.")
    os._exit(1)

# Timer process
def timer_process(shared_variable):
    threshold_time_secs = 5
    time.sleep(threshold_time_secs)
    print("Timeout reached")
    print("Shared variable ",shared_variable.value)
    print("Task is shutdown.")
    os._exit(1)

if __name__ == "__main__":
    lock = Lock()
    shared_variable = Array('c',"initial",lock=lock)
    process_main = Process(target=main_process, args=(shared_variable))
    process_timer = Process(target=timer_process, args=(shared_variable))

    process_main.start()
    process_timer.start()
    process_timer.join()

Процесс таймера вызывает os._exit, но сценарий все еще ждет, пока основной процесс напечатает "Task finished normally.", прежде чем выйти.

Как сделатьЯ делаю так, чтобы при выходе из процесса таймера вся программа выключалась (включая основной процесс)?

Спасибо.

...