2016-10-13 6 views
1

Я пытаюсь открыть книгу, используя предварительно открытый объект excel com в потоке python. Используя приведенный ниже код:Python Threading With Excel Com Object

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

Можете ли вы включить полную трассировку? – sytech

ответ

0

«многопроцессорная обработка» не является «резьбой». Вместо этого используйте from threading import Thread, Queue. Какое бы то ни было событие для взаимодействия между процессами, dtaa сериализуется для совершения вызовов кода в другом процессе, а объекты COM используют системные ресурсы, которые не являются сериализуемыми.

Если операции, которые должны выполняться на ваших данных, - это IOBound, то только использование потоков будет соответствовать вам. Если у вас есть код, который бы использовал несколько ядер в чистом Python - при явном вычислении, вы можете сделать отдельный процесс только с вашими данными - уже на стороне Python, а не с COM-объектами.