2017-12-28 49 views
0

xslファイルを使用して複数のXMLファイルをマージしています。ファイル数は約100であり、各ファイルのノード数は4000です。ので、私のコードが実行される...複数のXMLファイルをPythonでマージする速度を向上させる

import lxml.etree as ET 
import argparse 
import os 
ap = argparse.ArgumentParser() 
ap.add_argument("-x", "--xmlreffile", required=True, help="Path to list of xmls") 
ap.add_argument("-s", "--xslfile", required=True, help="Path to the xslfile") 
args = vars(ap.parse_args())  
dom = ET.parse(args["xmlreffile"]) 
xslt = ET.parse(args["xslfile"]) 
transform = ET.XSLT(xslt) 
newdom = transform(dom) 
print(ET.tostring(newdom, pretty_print=True)) 

私はXMLFILEへのpythonの出力を書いています:たとえば、XMLとXSLは次のように私のxmlmerge.pyがあり、ここで、このSO question

でご利用いただけます次のようにPythonスクリプトは次のとおりです。100個のファイルの場合

python xmlmerge.py --xmlreffile ~/Documents/listofxmls.xml --xslfile ~/Documents/xslfile.xsl 

私はコンソールに出力を印刷するとき、私はxmlファイル

で同じ出力を保存しようとするならば、それは、しかし、約120分かかります10
python xmlmerge.py --xmlreffile ~/Documents/listofxmls.xml --xslfile ~/Documents/xslfile.xsl >> ~/Documents/mergedxml.xml 

これは約3日かかりますが、マージは完了していません。マシンが吊り下がっていて、別のマシンでわずか8個のファイルで試してみたのかどうかはわかりませんでしたが、4時間以上かかっていましたが、まだマージが完了していません。私はファイルに書き込むのに時間がかかりますが、コンソールに印刷しているときはそれほど時間がかかりません。誰かが私を導くことができる?

私はUbuntu 14.04、python 2.7を使用しています。

答えて

0

なぜあなたはあなたのスクリプトのマルチプロセッシングバージョンを作っていないのですか?ここでは、そこ私は、その後、

list = open("listofxmls.xml","r")# assuming this gives you a list of files (adapt if necessary) 

yourFunction(xml): 
    steps 
    of your 
    parse funct 
    return(ET.tostring(newdom, pretty_print=True)) 

from multiprocessing.dummy import Pool as ThreadPool 
pool = ThreadPool(4) # number of threads (adapt depending on the task and your CPU) 
mergedXML = pool.map(yourFunction,list) # execute the function in parallel 
pool.close() 
pool.join() 

を行い、あなたが好きなようにあなたのmergedXMLを救うだろうかされて、あなたがそれを行うことができ、いくつかの方法がありますが、私が理解から。

希望するか、少なくとも、正しい方向にあなたを導くことを望む

関連する問題