Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python名称错误:未定义全局名称_Python_Queue_Nameerror - Fatal编程技术网

python名称错误:未定义全局名称

python名称错误:未定义全局名称,python,queue,nameerror,Python,Queue,Nameerror,我收到此错误名称错误:未定义全局名称“控制队列” 我已经检查了整个控制队列,我认为我创建它是正确的 这是我的密码: 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, c

我收到此错误名称错误:未定义全局名称“控制队列” 我已经检查了整个控制队列,我认为我创建它是正确的

这是我的密码:

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) 
我想这是说我没有正确地创建它,但我看了一些队列教程,就我所知,它是正确的。有人能指出我把事情搞砸了吗?谢谢各位

在函数halt\u listener中,您的参数是control\u Queue,但您使用的是变量control\u Queue大写问题。

在函数halt\u listener中,您的参数是control\u Queue,但您使用的是变量control\u Queue大写问题。

在python中,control\u Queue与control\u Queue不同。案件敏感性问题。 您将参数设置为control\u Queue,但稍后将使用control\u Queue。

control\u Queue与python中的control\u Queue不同。案件敏感性问题。 您将参数设置为控制队列,但稍后使用控制队列。

这种情况是错误的。isAlive=control\u queue.get应为 isAlive=control\u Queue.get

有几个地方发生了这种情况

这是错误的。isAlive=control\u queue.get应为 isAlive=control\u Queue.get

有几个地方正在发生这种情况