我在 go 程序中对 api 进行了大量网络调用,结果存储在数据库中(使用 mgo)。api 调用是在单独的 go 例程上完成的。在其他例程中,我会在更新数据库之前从数据库中提取信息并对其进行处理。当数据被放回时,一个标志被设置,以便知道该数据已被后处理,因此当程序要求数据库提供另一个条目以进行后处理时,数据库将标志complete设置为false。当标志设置为true,则走常规关机:wg.done()。
一切都很好,我有很多打印输出告诉我程序是如何运行的,但是在运行结束时,我得到了一个巨大的堆栈跟踪,其中包含许多相同的内容:
goroutine 56731 [sleep]: time.Sleep(0x12a05f200) /usr/local/Cellar/go/1.5/libexec/src/runtime/time.go:59 +0xf9 gopkg.in/mgo%2ev2.(*mongoServer).pinger (0xc82601b420, 0x1) /Users/alex/go/src/gopkg.in/mgo.v2/server.go:295 +0x1b4 由 gopkg.in/mgo%2ev2.newServer /Users/alex/go/src/gopkg 创建.in/mgo.v2/server.go:88 +0x162
goroutine 56698 [sleep]: time.Sleep(0x12a05f200) /usr/local/Cellar/go/1.5/libexec/src/runtime/time.go:59 +0xf9 gopkg.in/mgo%2ev2.(*mongoServer).pinger (0xc82601bce0, 0x1) /Users/alex/go/src/gopkg.in/mgo.v2/server.go:295 +0x1b4 由 gopkg.in/mgo%2ev2.newServer /Users/alex/go/src/gopkg 创建.in/mgo.v2/server.go:88 +0x162
goroutine 56699 [sleep]: time.Sleep(0x1dcd6500) /usr/local/Cellar/go/1.5/libexec/src/runtime/time.go:59 +0xf9 gopkg.in/mgo%2ev2.(*mongoCluster).syncServersLoop (0xc8256425a0) /Users/alex/go/src/gopkg.in/mgo.v2/cluster.go:353 +0x2b1 由 gopkg.in/mgo%2ev2.newCluster /Users/alex/go/src/gopkg.in 创建/mgo.v2/cluster.go:73 +0x1a0
goroutine 56738 [sleep]: time.Sleep(0x12a05f200) /usr/local/Cellar/go/1.5/libexec/src/runtime/time.go:59 +0xf9 gopkg.in/mgo%2ev2.(*mongoServer).pinger (0xc82606fa40, 0x1) /Users/alex/go/src/gopkg.in/mgo.v2/server.go:295 +0x1b4 创建的 gopkg.in/mgo%2ev2.newServer /Users/alex/go/src/gopkg .in/mgo.v2/server.go:88 +0x162
我正在努力弄清楚它告诉我什么,它是否锁定写入数据库,例程是否没有关闭以及某些东西是否超时,我不知道。顺便说一句,我正在使用 go 1.5。
拉莫斯之舞
相关分类