使用Excel Com对象进行Python线程处理

时间:2016-10-13 15:44:32

标签: python excel multithreading 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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

&#34;多处理&#34;不是&#34;线程&#34; - 改为使用from threading import Thread, Queue。 令人高兴的是,对于进程间通信,dtaa被序列化以在另一个进程上调用代码,而COM对象使用不可序列化的系统资源。

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