Запуск нескольких одновременных экземпляров Python win32com - PullRequest
0 голосов
/ 14 февраля 2019

В настоящее время я автоматизирую несколько процессов обработки данных, и мне необходимо обновить модели данных в виде нескольких таблиц Excel.

Вместо того, чтобы вручную обновлять эти файлы, я решил написать сценарий решения на основе Python win32Com * 1003.*

Вот моя текущая функция

import win32com.client, os

def updateExcelFile(directory, fileName):
    print('updating {fileName}'.format(fileName=fileName))
    root = os.path.dirname(os.path.realpath(__file__))
    xlapp = win32com.client.Dispatch('Excel.Application'))
    wb = xlapp.Workbooks.Open(root + '\\EXCEL\\{directory}\\{fileName}.xlsx'.format(directory=directory, fileName=fileName))
    wb.RefreshAll()

    time.sleep(30)  
    wb.Close(SaveChanges=True)
    xlapp.Quit()

    print('{fileName} saved'.format(fileName=fileName))

if __name__ == '__main__':
    for excelFile in excelFiles:
        updateExcelFile(directory=excelFile['directory'], fileName=excelFile['fileName'])

Я хотел бы запустить этот код одновременно и попробовал следующее

из concurrent.futures import ThreadPoolExecutor

if __name__ == '__main__':
    with ThreadPoolExecutor(max_workers=10) as executor:
        for excelFile in excelFiles:
            executor.submit(updateExcelFile, directory=excelFile['directory'], fileName=excelFile['fileName'])

Это правильно запустит процесс обновления одновременно для всех пяти листов Excel.однако, похоже, что после сохранения первого листа и однократного запуска xlapp.Quit все остальные процессы также будут уничтожены.

Как мне запустить несколько экземпляров win32com одновременно?

...