Python XML错误导致写入速度问题?奇怪的行为?

时间:2016-02-12 17:06:01

标签: python xml python-2.7 lxml

现在我已经接受了20个小时的工作,现在我很抱歉,如果我错过了一些非常直接的话。

这是我当前XML编写功能的片段:

def FileWrite():
    try:
        if os.path.exists("Temp.xml") == True:
            os.remove("Temp.xml")

        EventDumpCounter = 0

        for Eventes in EventTags:
            try:

                if os.path.exists("Temp.xml") == True:
                    tree = ET.parse("Temp.xml")
                    root = tree.getroot()
                if os.path.exists("Temp.xml") == False:
                    root = ET.Element("Refunds")
                    tree = ET.ElementTree(root)

                if float(EventCost[EventDumpCounter]) > float(Price[EventDumpCounter]):

                    if "Horse" in EventTags[EventDumpCounter]:
                        Eventes = ET.SubElement(root, "Event", type = EventTags[EventDumpCounter])
                        ET.SubElement(Eventes, "EventTime").text = str(EventTimes[EventDumpCounter])
                        ET.SubElement(Eventes, "EventName").text = str(EventName[EventDumpCounter])
                        ET.SubElement(Eventes, "EventLoc").text = str(EventLoc[EventDumpCounter])
                        ET.SubElement(Eventes, "EventSpace").text = str(EventSpace[EventDumpCounter])
                        ET.SubElement(Eventes, "EventCost").text = str(EventCost[EventDumpCounter])
                        ET.SubElement(Eventes, "EventPrice").text = str(EventPrice[EventDumpCounter])
                        ET.SubElement(Eventes, "EventParking").text = str(EventParking[EventDumpCounter])
                        ET.SubElement(Eventes, "EventDist").text = str(EventDist[EventDumpCounter])
                        tree.write("Temp.xml")

                EventDumpCounter +=1

            except:
                print "Problem writing XML"

    #except:
    except WindowsError, e:
        print "Problem creating XML 2"
        #e = sys.exc_info()[0]
        print e

所以我需要它从这些列表中取出所有内容并将其转储到XML文件中。它在那种状态下工作,但它比我想要的慢得多,而且不是硬件问题。

我正在看Temp.xml从0KB到16KB到0KB到50KB到0KB到80KB到0KB到200KB到0KB ......你明白了。

它的完成时间也比我通常预期的要长。我发誓我已经使用了比这更多的数据,而且一切都很好。

但基于错误和时间,我很确定我在这里做错了什么。它甚至可能非常明显,但我看不到它。

我错过了什么吗?

更新

我已经改变了它调用FileWrite()的方式,因此它不会继续触发,并且已经删除了我之前看到的错误,但是它仍然花了很长时间才开始看起来像一个接近无限循环。

我被要求展示我如何称它为基本上:

while 1:
        time.sleep(10)
        if OnlyOneXMLWriteCheck == 1:
            WriteThatThread = Thread(target = FileWrite)
            WriteThatThread.start()
            WriteThatThread.join()

在脚本开头,OnlyOneXMLWriteCheck设置为1。 FileWrite函数启动时为0,完成后再次为1,因此阻止它运行多次。

所以它不再运行自己的多个版本了,但至少它是在写它的时候写的。

在0KB 20KB 0KB 50KB 0KB 120KB 0KB 200KB等之间弹跳...现在在那里坐了几分钟。无论问题出在哪里,它都像我的内部FileWrite()一样,它接近无限循环。

这不是硬件问题虽然我注意到它写了一个CPU内核比其他内核做了更多的工作。

http://puu.sh/n5mv3/ba1c5d8974.png

也许我可以让线程写入元素,或者更好地平衡其他核心的东西?

进一步更新

如果只是写一个结果,则需要一毫秒。在我眨眼之前,所以没有理由将100写入接近60秒。循环内部的东西正在减慢它。

我已经尝试过这样做而不检查树/根标签是否存在Temp.xml但是没有对速度做任何明显的事情。它只是通过所有这些列表吗?

我不认为我可以编写线程,因为它无论如何都需要排队以避免自我编写并弄乱标记。

我在这里不知所措。

0 个答案:

没有答案