无法引用全局字典条目

时间:2013-07-18 00:56:17

标签: 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 == "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

我尝试过几种不同的方式访问字典,我似乎无法找出谷歌有什么问题。如果我使用单独的变量,它确实有效,但不会动态扩展。

1 个答案:

答案 0 :(得分:3)

subAlive附近加上引号:

run = alive['subAlive']