title: python NameError: global name is not defined
body: <p>I am getting this error <code>NameError: global name 'control_queue' is not defined
  </code> I have checked <code>control_queue</code> through out and I think I created it right.</p>
  
  <p>Here is my code:</p>
  
  <pre><code>import multiprocessing 
  import time 
  from threading import Thread
  
  class test_imports:#Test classes remove 
        alive = {'import_1': True, 'import_2': True};
  
        def halt_listener(self, control_Queue, thread_Name, kill_command):
            while True:
                print ("Checking queue for kill")
                isAlive = control_queue.get()
                print ("isAlive", isAlive)
                if isAlive == kill_command:
                   print ("kill listener triggered")
                   self.alive[thread_Name] = False;
                   return
  
        def import_1(self, control_Queue, thread_Number):
            print ("Import_1 number %d started") % thread_Number
            halt = test_imports()
            t = Thread(target=halt.halt_listener, args=(control_Queue, 'import_1', 't1kill'))
            count = 0 
            t.run()
            global alive 
            run = test_imports.alive['import_1'];
            while run:
                  print ("Thread type 1 number %d run count %d") % (thread_Number, count)
                  count = count + 1
                  print ("Test Import_1 ", run)
                  run = self.alive['import_1'];
            print ("Killing thread type 1 number %d") % thread_Number 
  
  
  
        def import_2(self, control_queue, thread_number):
            print ("Import_2 number %d started") % thread_number
            count = 1
            while True:
                  alive = control_queue.get()                   
                  count = count + 1
                  if alive == 't2kill':
                     print ("Killing thread type 2 number %d") % thread_number
                     return 
                  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>I think it is saying I am not creating it properly, but I went over a few queue tutorials and as far as I can tell it is correct. Can anyone point out where I am messing up? Thanks guys and gals!</p>