2013-07-18 72 views
0

我知道,在這種情況下,全局變量並不總是處理事情的最佳方式,它們對我所做的事情都很好。我不會做大量的讀/寫大部分只是讀取。無法引用全局字典條目

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 

我試圖訪問該字典的幾個不同的方式和我似乎無法找出什麼是錯誤的谷歌。如果我使用單獨的變量,它可以工作,但不會動態縮放。

+0

你的縮進是錯誤的。你確定你正確地複製了嗎? – user2357112

回答

3

加引號subAlive

run = alive['subAlive'] 
+0

那麼現在它已經修復了一半,但它運行了一段時間後應該退出 –

+0

@KyleSponable這真的是一個單獨的問題。 –

+0

@JeffTratner我正在離開,所以任何人試圖複製它或使用它意識到它的侷限性 –