Как несколько многопроцессорных очередей передают значение от одной функции к другой

alphanumeric спросил: 07 октября 2018 в 01:05 в: python

Приведенный ниже код, хотя и не дает сбоя, не возвращает значение os.getpid() из функции foo. Как передать значение через несколько объектов очереди, чтобы оно могло быть напечатано с помощью команды print(queue.get())?

import time, multiprocessing, osdef foo(*args):
    outside_queue = args[0]
    logger = multiprocessing.log_to_stderr()
    logger.warning(os.getpid())
    outside_queue.put(os.getpid())
    time.sleep(30)class Object(object):
    def run(self, *args):
        outside_queue = args[0]        items = dict()
        for i in range(5):
            queue = multiprocessing.Queue()
            proc = multiprocessing.Process(target=foo, args=(queue,))
            items[proc] = queue
            proc.start()        for proc, queue in items.items():
            if not queue.empty():
                outside_queue.put(queue.get())for i in range(2):
    obj = Object()
    queue = multiprocessing.Queue()
    proc = multiprocessing.Process(target=obj.run, args=(queue,))
    proc.start()
    while True:
        proc.join(1)
        if not proc.is_alive():
            break        if not queue.empty():
            print(queue.get())
        time.sleep(0.1)

0 ответов