2011-02-08 70 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应该是函数中的一个本地作用域变量,它应该随着堆栈帧消失...