私はマルチプロセッシングの初心者ですが、大量の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と異なること
を
を読んでいるこの種を作成する方法であります機能の仕事の。
マルチプロセッシングは、あなたが思うほどの助けにならないかもしれません...あなたのXMLファイルが異なるボリューム上に存在しない限り、おそらくディスクをスラッシュしてかなりのパフォーマンスを得るでしょう。マルチスレッディング/処理は、ネットワーク使用や配布可能なCPU負荷を伴うアプリケーションに適しています。 – Shadow
@Shadow - 必ずしもそうでないXMLファイルが巨大で複雑な場合、XML解析はCPU時間のかなりの部分を食べて、 (もちろん、マルチコア/マルチプロセッサ環境を前提としています)。 – zwer
完全なスタックトレースを提供してください。私はここで属性エラーの原因は見当たりません...あなたが渡しているファイル名は文字列ではありません... – Shadow