2016-10-13 7 views
1

Pythonスレッド内で事前に開いたExcelオブジェクトを使用してワークブックを開こうとしています。以下のコードを使用する: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の場合は、スレッドを使用するだけで十分です。完全な純粋なPythonで複数のコアを利用するコードを持っているならば、COMオブジェクトではなくPython側のデータだけで別のプロセスを使用することができます。

関連する問題