我有一个python脚本,它实现了两个级别的多处理:
from multiprocessing import Process, Queue, Lock
if __name__ == '__main__':
pl1s = []
for ip1 in range(10):
pl1 = Process(target=process_level1, args=(...))
pl1.start()
pl1s.append(pl1)
# do somehting for awhile, e.g. for 24 hours
# time to terminate
# ISSUE: this terminates process_level1 processes
# but not process_level2 ones
for pl1 in pl1s:
pl1.terminate()
def process_level1(...):
# subscriibe to external queue
#
with queue.open(name_of_external_queue, 'r') as subq:
qInternal = Queue()
pl2s = []
for ip2 in range(3):
pl2 = Process(target=process_level2, args=(qInternal))
pl2.start()
pl2s.append(pl2)
# grab messages from external queue and push them to
# process_level2 processes to process
#
while True:
message = subq.read()
qInternal.put(m)
def process_level2(qInternal):
while True:
message = qInternal.get()
# do something with date form message
因此,在main中,我启动一组从属子进程process_level1
,每个子进程启动一组自己的子进程process_level2
。Main
应该运行一段预定义的时间(例如24小时),然后终止所有操作。问题是上面的代码终止了第一层的子进程,而不是第二层。在
如何同时终止两个层?在
(可能是一个重要的)警告:我想一种方法是建立一个内部队列,从main
到{process_level1
运行一个无限循环,从外部队列读取消息。所以我不确定我将在哪里和如何检查来自main的终止信号。在
目前没有回答
相关问题 更多 >
编程相关推荐