[英]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.