python中的线程

时间:2009-08-28 10:12:45

标签: python multithreading

我在python脚本中开始。我想读取msaccess数据库记录并写入XML文件。 Access数据库表有超过20000条记录。

现在我能够做到,但需要4到5分钟。所以我实现了线程概念。但线程也需要超过5到6分钟。因为每个线程都打开数据源从表中读取记录并关闭数据源。

我不知道如何解决问题。

CODE:

class ConfigDataHandler(Thread):

  def __init__(self, dev):
    Thread.__init__(self)
    self.dev = dev

  def run(self):    
    db_source_path = r'D:\sampleDB.mdb'
    db_source = win32com.client.Dispatch(r'ADODB.Connection')
    db_source.ConnectionString = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;
                                 DATA SOURCE=' +   db_source_path + ';'
    db_source.Open()

    query = """ SELECT * from table"""
    source_rs = win32com.client.Dispatch(r'ADODB.Recordset')
    source_rs.Open(query, db_source, 3, 1)

    while not source_rs.EOF :
        f_units.append(source_rs.fields("Name").Value))
        source_rs.MoveNext()
    source_rs.Close()
    db_source.Close() 

    out =  render(f_units)
    open("D:/test.xml", "w").write(out)

d_list = get_dev_list()
for d in d_list:       
  current = ConfigDataHandler(d)
  current.start()

2 个答案:

答案 0 :(得分:5)

如上所述,请粘贴您的代码段。首先 - 线程有一个同步开销,导致多线程运行得更慢。

第二 - msaccess / JET数据库非常慢,并不适合多线程使用。您可能希望考虑使用SQL Server - SQL Server Express是免费的。

第三 - 可能是数据库减慢了处理速度。你有什么指数?你在做什么问题? “解释”说什么?

答案 1 :(得分:0)

  1. 撤消线程化内容。

  2. 在原始的无线代码上运行profiler

  3. 用普通ODBC替换AODB业务。

  4. 通过探查器运行新代码。

  5. 发布您的结果以供进一步讨论。