我在python脚本中开始。我想读取msaccess数据库记录并写入XML文件。 Access数据库表有超过20000条记录。
现在我能够做到,但需要4到5分钟。所以我实现了线程概念。但线程也需要超过5到6分钟。因为每个线程都打开数据源从表中读取记录并关闭数据源。
我不知道如何解决问题。
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()
答案 0 :(得分:5)
如上所述,请粘贴您的代码段。首先 - 线程有一个同步开销,导致多线程运行得更慢。
第二 - msaccess / JET数据库非常慢,并不适合多线程使用。您可能希望考虑使用SQL Server - SQL Server Express是免费的。
第三 - 可能是数据库减慢了处理速度。你有什么指数?你在做什么问题? “解释”说什么?
答案 1 :(得分:0)
撤消线程化内容。
在原始的无线代码上运行profiler。
用普通ODBC替换AODB业务。
通过探查器运行新代码。
发布您的结果以供进一步讨论。