我正在尝试创建一个程序来抓取xml文件。我正在尝试围棋,因为它是goroutines。我有几千个文件,所以某种类型的多处理几乎是必需的......
我有一个程序成功运行,并将xml转换为csv(作为测试,不完全是最终结果),在一组测试文件上,但是当使用完整的文件集运行时,它给出了这样的:
runtime: program exceeds 10000-thread limit
我一直在寻找类似的问题,而且有几个,但我还没有找到一个足够相似的问题来解决这个问题。
最后,这里有一些代码 im 运行:
// main func (start threads)
for i := range filelist {
channels = append(channels, make(chan Test))
go Parse(files[i], channels[len(channels)-1])
}
// Parse func (individual threads)
func Parse(fileName string, c chan Test) {
defer close(c)
doc := etree.NewDocument()
if err := doc.ReadFromFile(fileName); err != nil {
return
}
root := doc.SelectElement("trc:TestResultsCollection")
for _, test := range root.FindElements("//trc:TestResults/tr:ResultSet/tr:TestGroup/tr:Test") {
var outcome Test
outcome.StepType = test.FindElement("./tr:Extension/ts:TSStepProperties/ts:StepType").Text()
outcome.Result = test.FindElement("./tr:Outcome").Attr[0].Value
for _, attr := range test.Attr {
if attr.Key == "name" {
outcome.Name = attr.Value
}
}
for _, attr := range test.FindElement("./tr:TestResult/tr:TestData/c:Datum").Attr {
if attr.Key == "value" {
outcome.Value = attr.Value
}
}
c <- outcome
}
}
// main (process results when threads return)
for c := 0; c < len(channels); c++ {
for i := range channels[c] {
// csv processing with i
}
}
我敢肯定那里有一些丑陋的代码。我最近刚从其他语言中拿起go...所以我提前道歉。无论如何
任何想法?
MMTTMM
相关分类