#!/usr/bin/env python # -*- coding: utf-8 -*- import multiprocessing as mp from queue import Empty import os import sys import signal import time import random num_cpus = 4 cpus = list(range(0, num_cpus)) ps_pool = list(range(0, num_cpus)) ps_queues = list(range(0, num_cpus)) def resource_hungry_subprocess(ps_queue): pid = os.getpid() while True: if (random.randint(0, 2) == 1): os.kill(pid, signal.SIGKILL) string = '' for i in range(0, 10000): string = string + ' some text from subprocess ' ps_queue.put(string) time.sleep(random.random()) def ps_start(cpus): for cpu in cpus: ps_queues[cpu] = mp.Queue() ps_pool[cpu] = mp.Process(target=resource_hungry_subprocess, args=(ps_queues[cpu], )) ps_pool[cpu].start() def ps_stop(cpus): for cpu in cpus: ps_queues[cpu].close() ps_pool[cpu].terminate() ps_start(cpus) while True: for cpu in cpus: print('queue.get() from pid {0}'.format(ps_pool[cpu].pid)) try: result = ps_queues[cpu].get(timeout=2) except Empty: ps_stop([cpu]) ps_start([cpu]) else: pass print('') ps_stop(cpus) sys.exit()