mikespook/gearman-go

Handle ID duplicated

mikespook opened this issue · 2 comments

多个 goruntine 并发实例化client,然后递交任务会有问题,返回的hanlde可能都是相同的。worker只能收到一次处理任务请求。

具体是这样:

go func() { client.New() .... client.Do(...) }()
go func() { client.New() .... client.Do(...) }()
....多个goroutine

发现是 client中的ai计数器每次都随client.New重建导致的,我改成从一个全局计数器引用后就可以这样使用了。

不过你原来的client构架应是实例一次client,然后可以跨goroutine并发递交任务。

var @ruan Chunping

嗯,我是这样改的
clieng.go:
增加
var _AI autoinc.AutoInc
func init(){
_AI = *autoinc.New(0,1)
}

func New()中
ai: &_AI, //autoinc.New(0, 1),

干脆将每个 client 的 ai 移除,使用全局的 auto-inc 了。
已经做了修复。多谢!