1

我正在尝试在 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

有什么建议么?

4

1 回答 1

0

“多处理”不是“线程” -from threading import Thread, Queue改为使用。发生的事情是,对于进程间通信,dtaa 被序列化以调用另一个进程上的代码,而 COM 对象使用不可序列化的系统资源。

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

于 2016-10-13T16:13:04.187 回答