#! /usr/bin/env python2.7 

import os 
from multiprocessing import Process, Lock, Queue, Pipe, cpu_count 

def lockfunc(olck, uilaps): 
    olck.acquire() 
    
    for ui in xrange(4*uilaps): 
        print ' ' + str(ui) + ' lock acquired by pid : ' + str(os.getpid()) 
    
    olck.release() 

def queuefunc(oque): 
    oque.put(" message in Queue : LPM rockz!!!") 

def pipefunc(oc): 
    oc.send(" message in Pipe : FOSS rulz!!!") 
    oc.close() 

if '__main__' == __name__: 

    uicores = cpu_count() 
    olck = Lock() 

    oque = Queue() 
    op, oc = Pipe() 

    for ui in xrange(1, 2*uicores): 
        Process(target = lockfunc, args = (olck, ui,)).start() 

    opq = Process(target = queuefunc, args = (oque,)) 
    opq.start() 
    print 
    print oque.get() 
    print 
    opq.join() 

    opp = Process(target = pipefunc, args = (oc,)) 
    opp.start() 
    print op.recv() 
    print 
    opp.join()
