The code posted below, while does not crash, does not return os.getpid()
value from foo
function. How to pass a value over the multiple queue objects so it could be printed with a print(queue.get())
command?
import time, multiprocessing, os
def 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)