Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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_Dictionary - Fatal编程技术网

Python 无法引用全局字典条目

Python 无法引用全局字典条目,python,dictionary,Python,Dictionary,我知道全局变量并不总是处理事情的最佳方式,在这种情况下,它们适合我所做的事情。我不会做大量的阅读/写作,主要是阅读 alive = {'subAlive': True, 'testAlive': True}; def sub_listener(conn): #listens for kill from main global alive while True: data = conn.recv() if data

我知道全局变量并不总是处理事情的最佳方式,在这种情况下,它们适合我所做的事情。我不会做大量的阅读/写作,主要是阅读

    alive = {'subAlive': True, 'testAlive': True};

    def sub_listener(conn): #listens for kill from main 
        global alive
        while True:
        data = conn.recv()
        if data == "kill":
           alive['subAlive'] = False; #value for kill 
           break

     def subprocess(conn, threadNum):
         t = Thread(target=sub_listener, args=(conn,))
         count = 0                
         threadVal = threadNum 
         t.start()
         run = alive[subAlive];
         while run:
               print "Thread %d Run number = %d" % (threadVal, count)
               count = count + 1

       sub_parent, sub_child = Pipe()
       runNum = int(raw_input("Enter a number: ")) 
       threadNum = int(raw_input("Enter number of threads: "))

       print "Starting threads"

       for i in range(threadNum):
           p = Process(target=subprocess, args=(sub_child, i))
           p.start()

       print "Starting run"

       time.sleep(runNum) 

       print "Terminating Subprocess run"
       for i in range(threadNum):
           sub_parent.send("kill") #sends kill to listener

       p.join()
我得到这个错误

 NameError: global name 'testAlive' is not defined
 Traceback (most recent call last):
 File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
   self.run()
 File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
   self._target(*self._args, **self._kwargs)
 File "multiprocessDemo.py", line 38, in subprocess
   run = alive[subAlive];
 NameError: global name 'subAlive' is not defined

我尝试了几种不同的方法来访问字典,但我似乎无法找出谷歌上的错误。如果我使用单独的变量,它确实可以工作,但不能很好地动态伸缩

sublive
周围加引号:

run = alive['subAlive']

subLive
周围加引号:

run = alive['subAlive']

好吧,这确实解决了一半的问题,现在它运行了,但在一段时间后它应该退出time@KyleSponable这真的是一个单独的问题。@JeffTratner我离开了,所以任何试图复制或使用它的人都会意识到它的局限性Swall确实修复了它的一半,现在它运行了,但进入了内部,它应该在一段时间后退出一定时期time@KyleSponable这真的是一个单独的问题。@JeffTratner我留下了这个问题,所以任何试图复制或使用它的人都会意识到它的局限性您的缩进是错误的。您确定复制的内容正确吗?缩进错误。你确定你复制的正确吗?