现在我已经接受了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内核比其他内核做了更多的工作。
也许我可以让线程写入元素,或者更好地平衡其他核心的东西?
进一步更新
如果只是写一个结果,则需要一毫秒。在我眨眼之前,所以没有理由将100写入接近60秒。循环内部的东西正在减慢它。
我已经尝试过这样做而不检查树/根标签是否存在Temp.xml但是没有对速度做任何明显的事情。它只是通过所有这些列表吗?
我不认为我可以编写线程,因为它无论如何都需要排队以避免自我编写并弄乱标记。
我在这里不知所措。