2016-10-13 12 views
1

미리 열어 놓은 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

어떤 제안을 얻을?

+0

전체 추적을 포함 할 수 있습니까? – sytech

답변

0

"다중 처리"는 "스레딩"이 아닙니다. 대신 from threading import Thread, Queue을 사용하십시오. 프로세스 간 통신을 위해 dtaa가 직렬화되어 다른 프로세스의 코드를 호출하고 COM 개체가 직렬화 할 수없는 시스템 리소스를 사용합니다.

데이터에서 수행해야하는 작업이 IOBound 인 경우 스레드 만 사용하면됩니다. 완전한 파이썬에서 다중 코어를 활용할 수있는 코드를 가지고 있다면 - 계산은 물론, 이미 파이썬 측에있는 데이터만으로도 COM 객체가 아닌 별도의 프로세스를 수행 할 수 있습니다.