Python 使用 Excel Com 对象的线程

Python Threading With Excel Com Object

我正在尝试使用 python 线程中预先打开的 excel com 对象打开工作簿。使用以下代码:

from multiprocessing import Process, Queue

def open_workbook(excel,iSub_Loc,q):
    p = Process(target = open_workbook_helper, args = (excel,iSub_Loc))
    p.daemon = True
    p.start()

def open_workbook_helper(excel,iSub_Locq,):
    wb = excel.Workbooks.Open(iSub_Loc)
    ws = wb.Sheets(1)
    q.put((wb,ws))

但我收到以下错误

Can't pickle <type PyIDispatch'>: it's not found as __builtin__.PyIDispatch

有什么建议吗?

"multiprocessing" 不是 "threading" - 请改用 from threading import Thread, Queue。 发生的事情是,对于进程间通信,dtaa 被序列化以调用其他进程上的代码,而 COM 对象使用不可序列化的系统资源。

如果您需要对数据执行的操作是 IOBound,则只使用线程将适合您。如果您的代码可以在纯 Python 中利用多个内核 - 通过纯粹的计算,那么您可以使用您的数据的单独进程 - 已经在 Python 端 - 而不是 COM 对象。