john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

concurrency multiprocess simple lock

# 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

  • « concurrency multiprocessing subclass
  • concurrency threaded multiprocess queue urlib2 get url comparison »

Published

Mar 5, 2013

Category

python

~126 words

Tags

  • concurrency 10
  • lock 3
  • multiprocess 3
  • python 180
  • simple 11