簡體   English   中英

多進程:兩個進程,一起殺死

[英]Multiprocessing: Two processes, kill both together

我在 python 程序中有兩個進程,使用多處理框架。 他們每個人都運行一個 function 並且他們每個人都有一個終止條件。 如果發生這種情況,我希望兩個都被殺死。

from multiprocessing import Process, Value, Array, Lock, Queue, active_children
import time
import random
from queue import Full

def producer_func(q:Queue, quantity):
    if condition:
       pass

def consumer_func(q:Queue, quantity, producer):
    if condition:
       producer.kill()

def main():
    q = Queue(10)
    quantity = 20

    producer = Process(name="producer", target=producer_func, args=(q, quantity))
    consumer = Process(name="consumer", target=consumer_func, args=(q, quantity, producer))

    producer.start()
    consumer.start()

    producer.join()
    consumer.join()

if __name__ == "__main__":
    main()

我可以以某種方式從消費者那里殺死生產者,但我不能反過來做同樣的把戲,因為消費者還沒有定義。 有什么好的技巧可以使用嗎?

使用multiprocess.Event

所有工作人員都應定期檢查是否設置了此Event ,並應在設置時返回。

可以從工作人員之一或父級設置Event

def producer_func(q, quantity, condition):
    if condition.is_set():
       return

def consumer_func(q:Queue, quantity, producer, condition):
    if condition.is_set():
       return


def main():
    q = Queue(10)
    exit_event = multiprocessing.Event()
    quantity = 20

    producer = Process(name="producer", target=producer_func, args=(q, quantity, exit_event))
    consumer = Process(name="consumer", target=consumer_func, args=(q, quantity, exit_event))

    producer.start()
    consumer.start()

    producer.join()
    consumer.join()

if __name__ == "__main__":
    main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM