Темы в питоне - PullRequest
       169

Темы в питоне

0 голосов
/ 28 августа 2009

Я начинающий в скрипте Python. Я хочу прочитать записи базы данных msaccess и записать в файл XML. Таблица доступа к базе данных содержит более 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()

Ответы [ 2 ]

5 голосов
/ 28 августа 2009

Как уже упоминалось, пожалуйста, вставьте свой фрагмент кода. Во-первых, у потоков есть издержки синхронизации, из-за которых многопоточность работает медленнее.

Второе - база данных msaccess / JET очень медленная и не очень подходит для многопоточного использования. Вы могли бы вместо этого рассмотреть SQL Server - SQL Server Express бесплатен.

В-третьих, вероятно, база данных замедляет обработку. Какие у вас показатели? Какие вопросы вы делаете? Что говорит "объяснить"?

0 голосов
/ 29 августа 2009
  1. Отменить работу с потоками.

  2. Запустите профилировщик для исходного не поточенного кода.

  3. Заменить бизнес AODB на обычный ODBC.

  4. Запустите новый код через профилировщик.

  5. Опубликуйте результаты для дальнейшего обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...