运行多个Python win32com并发实例

时间:2019-02-14 06:57:19

标签: python excel multithreading win32com

我目前正在使一些数据处理自动化,并且需要更新许多Excel工作表中的数据模型。

我选择手动编写基于Python win32Com的解决方案,而不是手动更新这些文件

这是我当前的功能

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'])

我想同时运行此代码,并尝试了以下操作

从current.futures导入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实例?

0 个答案:

没有答案