我正在尝试使用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
有什么建议吗?
答案 0 :(得分:0)
&#34;多处理&#34;不是&#34;线程&#34; - 改为使用from threading import Thread, Queue
。
令人高兴的是,对于进程间通信,dtaa被序列化以在另一个进程上调用代码,而COM对象使用不可序列化的系统资源。
如果您需要对数据执行的操作是IOBound,那么只使用线程就适合您。如果您的代码可以利用纯Python中的多个核心 - 通过纯粹的计算,那么您可以只使用您的数据进行单独的处理 - 已经在Python端 - 而不是COM对象。