代码之家  ›  专栏  ›  技术社区  ›  Maiinjoon

从另一个进程停止进程

  •  2
  • Maiinjoon  · 技术社区  · 1 年前

    大家好,我有两个不同的进程同时运行。 我正在尝试停止我命名为loop_b的另一个进程 但我只是设法停止了当前的进程,而另一个进程没有停止

    from multiprocessing import Process
    import time
    import sys 
    
    
    counter=0
    
    def loop_a():
        global counter
        while True:
            print("a")
            time.sleep(1)
            counter+=1
            if counter==10:
                print("I want to stop the loop_b")
                sys.exit()
                #Process(target=loop_b).close()  -> Also i tried this but not worked
    
    def loop_b():
        while True:
            print("b")
            time.sleep(1)
    
    if __name__ == '__main__':
        Process(target=loop_a).start()
        Process(target=loop_b).start()
    
    
    1 回复  |  直到 1 年前
        1
  •  2
  •   Andrej Kesely    1 年前

    一种可能的解决方案是使用 multiprocessing.Event 同步原语,以向其他进程发出它应该退出的信号,例如:

    import sys
    import time
    from multiprocessing import Event, Process
    
    
    def loop_a(evt):
        counter = 0
    
        while True:
            print("a")
            time.sleep(1)
            counter += 1
            if counter == 3:
                print("I want to stop the loop_b")
                evt.set()  # <-- set the flag to be True to signal exit
                sys.exit()
    
    
    def loop_b(evt):
        while not evt.is_set():
            print("b")
            time.sleep(1)
    
    
    if __name__ == "__main__":
        evt = Event()
    
        p1 = Process(target=loop_a, args=(evt,)).start()
        p2 = Process(target=loop_b, args=(evt,)).start()
    

    打印:

    a
    b
    a
    b
    a
    b
    I want to stop the loop_b  # <-- and the loob_b ends here too