Multiple threads producing/consuming values. : Producer Consumer « Thread « Python Tutorial






from Queue import Queue

import threading
import random
import time

class ProduceToQueue( threading.Thread ):
   def __init__( self, threadName, queue ):
      threading.Thread.__init__( self, name = threadName )
      self.sharedObject = queue
      
   def run( self ):
      for i in range( 11, 21 ):
         time.sleep( random.randrange( 4 ) )
         print "%s adding %s to queue" % ( self.getName(), i )
         self.sharedObject.put( i )

      print self.getName(), "finished producing values"
      print "Terminating", self.getName()

class ConsumeFromQueue( threading.Thread ):
   def __init__( self, threadName, queue ):
      threading.Thread.__init__( self, name = threadName )
      self.sharedObject = queue

   def run( self ):
      sum = 0
      current = 10

      for i in range( 10 ):
         time.sleep( random.randrange( 4 ) )
         print "%s attempting to read %s..." % ( self.getName(), current + 1 )
         current = self.sharedObject.get()
         print "%s read %s" % ( self.getName(), current )
         sum += current

      print "%s retrieved values totaling: %d" % ( self.getName(), sum )
      print "Terminating", self.getName()

queue = Queue()
producer = ProduceToQueue( "Producer", queue )
consumer = ConsumeFromQueue( "Consumer", queue )

producer.start()
consumer.start()

producer.join()
consumer.join()








17.3.Producer Consumer
17.3.1.Multiple threads producing/consuming values.