0

私はマルチプロセッシングの初心者ですが、大量のxmlファイルを解析する必要があります。解析はより大きなアプリケーションの一部です。解析は "バックグラウンド"で実行できるので、メインアプリケーションには影響しません。そのために私は次の(抜粋)Python 2.7 Windowsでのマルチプロセッシング

from lxml import etree 
from StringIO import StringIO 
import multiprocessing as mp 


def parseBookXML(xmlFile): 

    f = open(xmlFile) 
    xml = f.read() 
    f.close() 

    tree = etree.parse(StringIO(xml)) 

    #now write it out to file 
    with open("out_filename", "w") as fout: 
    fout.write(ET.tostring(tree)) 

def do_process_file(): 
    process = mp.Process(target=parseBookXML, args=(c:\my_xml_file.xml)) 
    process.start() 

は基本的に私は、parseBookXML関数を呼び出し、それをパラメータとしてファイル(またはxmlファイルのさえリスト)を渡すと解析はそれを独自の起こるようにしたいを持っていますプロセスと完了。

これを通常どおり(つまりprocess.start()なしで)行うとうまく動作します。

def do_process_file(): 
    self.parseBookXML(c:\my_xml_file.xml) 

上記の動作は問題なく、xml_fileはエラーなしで解析されます。

しかしdo_process_file機能を利用するには、私はREPLまたは対話型インタプリタを使用していない、のpython 2.7を使用してWindowsの午前

はAttributeErrorなしモジュールetree

の線に沿って、私にエラーが発生します。私は、私が本当に知っておくべきこと(私はそれが何を意味するのかわからないんだけど)私はWindowsで酸洗いないmulitprocessingについて少し読んだことが、窓は、Linuxと異なること

を読んでいるこの種を作成する方法であります機能の仕事の。

+2

マルチプロセッシングは、あなたが思うほどの助けにならないかもしれません...あなたのXMLファイルが異なるボリューム上に存在しない限り、おそらくディスクをスラッシュしてかなりのパフォーマンスを得るでしょう。マルチスレッディング/処理は、ネットワーク使用や配布可能なCPU負荷を伴うアプリケーションに適しています。 – Shadow

+0

@Shadow - 必ずしもそうでないXMLファイルが巨大で複雑な場合、XML解析はCPU時間のかなりの部分を食べて、 (もちろん、マルチコア/マルチプロセッサ環境を前提としています)。 – zwer

+0

完全なスタックトレースを提供してください。私はここで属性エラーの原因は見当たりません...あなたが渡しているファイル名は文字列ではありません... – Shadow

答えて

0

from lxml import etreeあなたのpythonにはモジュールlxmlがないようです。一部のモジュールはOSによって異なります。モジュールlxmlがWindows用であるかどうかを確認してください。

+0

lxmlはWindows上で正常に動作します。私はsucessuflly私のセットアップでを使用して多くのファイルを解析している。しかし、私がマルチプロセッシング・パーツを導入したとき、私はエラー –

+0

を取得します。LinuxまたはUnixでこれを最初に試してみてください。それは明らかにライブラリ/モジュールの問題です。 –

+0

残念ながら私はLinuxやUnixを持っていません。私はWindowsしか持っていません。ありがとう –

関連する問題