为了账号安全,请及时绑定邮箱和手机立即绑定

golang 系统调用,锁定到线程

golang 系统调用,锁定到线程

Go
富国沪深 2022-08-24 17:23:12
我正在尝试创建一个程序来抓取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...所以我提前道歉。无论如何任何想法?
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

我很抱歉没有包括正确的错误。正如评论所指出的那样,我正在做一些愚蠢的事情,并为每个文件创建一个例程。感谢JimB纠正我,并感谢torek提供解决方案和此链接。https://gobyexample.com/worker-pools


jobs := make(chan string, numJobs)

results := make(chan []Test, numJobs)


for w := 0; w < numWorkers; w++ {

    go Worker(w, jobs, results)

    wg.Add(1)

}


// give workers jobs


for _, i := range files {

    if filepath.Ext(i) == ".xml" {

        jobs <- ("Path to files" + i)

    }

}


close(jobs)

wg.Wait()


//result processing <- results


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信