from multiprocessing import Process, Queue, Lock

def productor(p, nElems, Cua):
    for i in range(nElems):
        Cua.put((p, i*i*i))
    Cua.close()

def consumidor(p, nElems, Cua, Pany):
    while True:
        res = Cua.get()
        with Pany:
            print(f'c{p}', res)

Cua = Queue()
Pany = Lock()
procsP=[Process(target=productor,
                args=(p, 100, Cua)) for p in range(3)]
procsC=[Process(target=consumidor,
                args=(p, 100, Cua, Pany)) for p in range(2)]
for p in procsC:
    p.daemon=True
for p in procsP+procsC:
    p.start()
for p in procsP:
    p.join()
