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 对象。
我正在尝试使用 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 对象。