title: Why won't my python else statement trigger?
body: <p>Here is the code, these are dummy classes that will eventually be replaced by something more useful. What I want the while loop to do is pull data from the queue to see if a poison pill was dropped. If not I want whatever is in the else statement to trigger. However for some reason it will wait till it gets a poison pill and only execute the kill condition if statement</p>
  
  <pre><code>class test_imports:#Test classes remove 
  
        def import_1(self, control_queue, thread_number):
            print ("Import_1 number %d started") % thread_number
            run = True
            count = 1
            while run == True:
                  alive = control_queue.get()                
                  count = count + 1
                  if alive == 't1kill':#&lt;==will trigger
                     print ("Killing thread type 1 number %d") % thread_number
                     run = False                   
                  else:#&lt;== won't trigger
                       print ("Thread type 1 number %d run count %d") % (thread_number, count) 
  </code></pre>
  
  <p>If needed the rest of the code is: </p>
  
  <pre><code>import multiprocessing 
  import time 
  
  class test_imports:#Test classes remove 
  
        def import_1(self, control_queue, thread_number):
            print ("Import_1 number %d started") % thread_number
            run = True
            count = 1
            while run == True:
                  alive = control_queue.get()                
                  count = count + 1
                  if alive == 't1kill':
                     print ("Killing thread type 1 number %d") % thread_number
                     run = False                   
                  else:
                      print ("Thread type 1 number %d run count %d") % (thread_number, count)     
  
  
  
        def import_2(self, control_queue, thread_number):
            print ("Import_2 number %d started") % thread_number
            run = True
            count = 1
            while run == True:
                  alive = control_queue.get()                   
                  count = count + 1
                  if alive == 't2kill':
                     print ("Killing thread type 2 number %d") % thread_number
                     run = False
                  else:
                       print ("Thread type 2 number %d run count %d") % (thread_number, count)
  
  
  class worker_manager:
       def __init__(self):
          self.children = {}
  
       def generate(self, control_queue, threadName, runNum):
          i = test_imports()
          if threadName == 'one':
              print ("Starting import_1 number %d") % runNum
              p = multiprocessing.Process(target=i.import_1, args=(control_queue, runNum))
              self.children[threadName] = p
              p.start()        
          elif threadName == 'two': 
              print ("Starting import_2 number %d") % runNum
              p = multiprocessing.Process(target=i.import_2, args=(control_queue, runNum))
              self.children[threadName] = p
              p.start()
          elif threadName == 'three':    
              p = multiprocessing.Process(target=i.import_1, args=(control_queue, runNum))
              print ("Starting import_1 number %d") % runNum
              p2 = multiprocessing.Process(target=i.import_2, args=(control_queue, runNum))
              print ("Starting import_2 number %d") % runNum
              self.children[threadName] = p
              self.children[threadName] = p2
              p.start()
              p2.start()
  
          else:
              print ("Not a valid choice choose one two or three")     
  
       def terminate(self, threadName):
           self.children[threadName].join
  
  
  if __name__ == '__main__':
      # Establish communication queues
      control = multiprocessing.Queue()
      manager = worker_manager()
  
      runNum = int(raw_input("Enter a number: ")) 
      threadNum = int(raw_input("Enter number of threads: "))
      threadName = raw_input("Enter number: ")
      thread_Count = 0
  
      print ("Starting threads") 
  
      for i in range(threadNum):
          manager.generate(control, threadName, i)
          thread_Count = thread_Count + 1              
  
      time.sleep(runNum)#let threads do their thing
  
      print ("Terminating threads")     
  
      for i in range(thread_Count):
          control.put("t1kill")
          control.put("t2kill")
  
      manager.terminate(threadName) 
  </code></pre>
  
  <p>Please note <code>import_2</code> is identical to <code>import_1</code> except prints something different. The point is to prove the ability to handle different thread types.    </p>