2011-02-08 65 views
0

當使用多線程時,我得到組合數據
列表是:A,B,C。如果我MT,這個fdata []包含來自A,B和C的數據。我如何獲得fdata也只保存一組數據。我試過del fdata沒有幫助。我需要某種鎖。如何使用python停止多線程返回組合數據

class WorkerThread(threading.Thread): 
     def __init__(self, queue): 
      threading.Thread.__init__(self) 
      self.queue = queue 

     def run(self): 
      while 1: 
       try: # take a job from the queue 
        symbol, test, test2 = self.queue.get_nowait() 

       except Queue.Empty: 
        raise SystemExit 

       fn = %s.CSV" % symbol 
       fdata = [] 
       fo = open(fn, 'rb') 
       fr = csv.reader(fo, dialect='excel') 
       for row in fr: 
        fdata.append(row) 
       #print fdata 
       #del fdata 

如何將線程號添加到fdata或列表ID爲A,B,C到fdata?

+2

這裏的多線程究竟是什麼?某種程度上你的fdata是全球性的嗎? – Liorsion 2011-02-08 06:59:43

+0

查看編輯 – Merlin 2011-02-08 15:12:38

回答

1

fdata應該總是包含CSV文件的內容,畢竟你對循環遍歷行,所以它應該總是包含AB和C ...也許你應該更多地解釋你正在嘗試做什麼。

關於你的第二個問題 - 你的線程對象有一個ident看到thread.get_ident()

返回的 當前線程的「線程標識」。這是一個非零數字 整數。它的價值沒有直接的 含義;它旨在用作例如魔術餅 ,索引 線程特定數據字典。 當一個線程退出並且另一個線程 被創建時,線程標識符可以被回收 。

編輯:

也許FDATA是某種全局變量或在被保存訪問文件?我在代碼片段中看不到任何內容,但我無法解釋它。根據函數fdata應該是函數中的一個本地作用域變量,它應該隨着堆棧幀消失...