import xml.sax import stackless import time xml_filename = "/Users/dalke/Music/iTunes/iTunes Music Library.xml" #xml_text = "DallasSanta Fe" class StacklessContentHandler(xml.sax.ContentHandler): def __init__(self, chan): self.chan = chan def startDocument(self): self.chan.send( ("startDocument", None) ) def startElement(self, tag, attrib): self.chan.send( ("startElement", (tag, attrib)) ) def characters(self, text): self.chan.send( ("characters", text) ) def endElement(self, tag): self.chan.send( ("endElement", tag) ) def endDocument(self): self.chan.send( ("endDocument", None) ) def iterParse(filename): chan = stackless.channel() handler = StacklessContentHandler(chan) stackless.tasklet(xml.sax.parse)(filename, handler) while 1: data = chan.receive() yield data if data[0] == "endDocument": break def main(): for (event, args) in iterParse(xml_filename): if event == "startElement": tag, attrib = args #print "start", repr(tag), dict(attrib.items()) pass elif event == "characters": #print "text", repr(args) pass elif event == "endElement": #print "end", repr(args) pass if __name__ == "__main__": t1 = time.time() stackless.tasklet(main)() stackless.run() t2 = time.time() print t2-t1