【问题标题】:How to stop multithreading returning combined data using python如何使用python停止多线程返回组合数据
【发布时间】:2011-02-08 04:49:36
【问题描述】:

使用多线程时,我得到组合数据
名单是:A,B,C。如果我对此进行 MT,则 fdata [] 包含来自 A、B 和 C 的数据。如何获取 fdata 也仅包含一组数据。我试过 del fdata 没有帮助。我需要某种锁。

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?

【问题讨论】:

  • 这里的多线程到底是什么?您的 fdata 在某种程度上是全球性的吗?

标签: python multithreading csv


【解决方案1】:

fdata 应该始终包含 CSV 文件的内容,毕竟您对行进行了 for 循环,因此它应该始终包含 A B 和 C...也许您应该解释更多您正在尝试做的事情。

关于你的第二个问题 - 你的线程对象有一个identthread.get_ident()

返回线程的“线程标识符” 当前线程。这是一个非零 整数。它的价值没有直接 意义;它是一种魔法 要使用的 cookie,例如索引一个 线程特定数据的字典。 线程标识符可以被回收 当一个线程退出而另一个线程 已创建。

编辑:

也许 fdata 以某种方式是一个全局变量或被保存在对文件的访问中?我在代码 sn-p 中看不到任何可以做到这一点的东西,但我不知道如何解释它。根据函数 fdata 应该是函数中的局部范围变量,它应该随堆栈帧一起消失......

【讨论】:

  • 尝试做:简单有很多csv。都差不多。 symbol.csv 是文件名。 “象征”的变化。我想多线程:文件读取然后加载到数据库中。我需要 fdata 来包含一个文件中的 onlt 数据。就目前而言,fdata 被所有线程打开并使用,它正在加载所有子 csv 数据。
猜你喜欢
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多