# 2013-03-04 subclassing the Process class, locks and queues
import multiprocessing
import sys
class Worker( multiprocessing.Process ):
def run(self):
print 'In %s' % self.name
return
class WorkerWithLock( multiprocessing.Process ):
def __init__( self , lock ):
multiprocessing.Process.__init__( self )
self.lock = lock
def run( self ):
self.lock.acquire()
try:
print '%s with lock acquired directly\n' % ( self.name )
finally:
self.lock.release()
return
if __name__ == '__main__':
cpus = multiprocessing.cpu_count()
cpus = 2
print 'cpus = %s' % cpus
print 'output will be strange as they do not lock on stdout\n'
jobs = []
for i in range( cpus ):
p = Worker()
jobs.append( p )
p.start()
for j in jobs:
j.join() # wait until all processes are done
print 'Each Process locks before writing to stdout\n'
jobs = []
lock = multiprocessing.Lock()
for i in range( cpus ):
p = WorkerWithLock( lock )
jobs.append( p )
p.start()
for j in jobs:
j.join() # wait until all processes are done