Потоки Python с объектом Excel Com

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

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

какие-либо предложения?


person GoBlue_MathMan    schedule 13.10.2016    source источник
comment
Не могли бы вы включить полную трассировку?   -  person sytech    schedule 13.10.2016


Ответы (1)


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

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

person jsbueno    schedule 13.10.2016