使用Excel Com对象的Python线程

我试图打开一个工作簿使用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

有什么build议么?

“multiprocessing”不是“线程” – 使用from threading import Thread, Queue来代替。 对于进程间通信而言,dtaa被序列化以调用另一个进程上的代码,而COM对象使用不可序列化的系统资源。

如果您需要对您的数据执行的操作是IOBound,只需使用线程将适合您。 如果你的代码可以利用纯Python中的多个核心 – 只需要计算,那么你就可以用一个单独的进程来处理你的数据 – 已经在Python端 – 而不是COM对象。