Gearman - 调度不平衡

问题描述:

我有两个具有不同IP地址的gearman管理员,我有两个客户端的40名工人,每个客户端上有20名工人。
问题出在这里,我每10分钟检查两个管理员的状态,他们在开始时的工作数量相同,但他们的数字以不同的速度下降,admin2比admin1快3倍。
这种情况最终导致一个问题,如果2种巨大的作业集合,例如job1有400000个作业,job2有400000个作业,job2比job1晚一个小时触发,那么他们每个都会完成一半他们中的第一个,因为另一半紧紧抓住管理员的手1,只有管理员完成调度才能管理他的工作,这是一场灾难,因为我想工作1完成,但是没有完成其中的一半,并继续等待一半的其他工作要完成。Gearman - 调度不平衡

这是一个例子:
enter image description here

+1

因此,它们的速度不同。但是,什么是*问题*? –

所以我找到了原因。在gearman服务器中,当工作人员标记为睡眠并且不是is_noop_sent时,它只会发送noop味精,并且在发送noop味精后,is_noop_sent被设置为false,并且只有在获取作业命令时才会设置为true。
但是在python gearman中,它使用锁来控制recv循环,如果它不能获得锁,如果会传递或发送pre_sleep命令 - 并且会导致服务器再也不会禁止该工作者。