业务场景:现在我数据库有100w数据,我想全部取出来进行业务操作,比如同步es,或者调用第三方接口检查状态。 问题:单进程去处理这100万数据显然很慢,我开10个进程,每个进程处理10万数据,这样会快很多,这样在webman 中应该怎么实现,同时怎么保证这个数据不会被重复执行
10个队列,取模分配
也就是我必须单独起10个队列进程吗
多少个队列进程不是关键,关键在于取模,保证每个消费者只消费他该消费的
我之前在使用symfony框架时,这个业务的实现方案是,写个command ,计算出数据总数块id所在区间,fork 10个子进程,并把id区间传递给子进程,由子进程对数据进行处理,处理完销毁子进程,当然id不连续会有问题
我想问的是webman 启动的时候启动的子进程,能否由这些固定的子进程去分块处理数据
public function onWorkerStart($worker) { echo $worker->id; }
$worker->id 是进程编号,从0开始。每个进程根据自己编号执行任务
$worker->id 参考文档 https://www.workerman.net/doc/workerman/worker/workerid.html
好的,谢谢老大
10个队列,取模分配
也就是我必须单独起10个队列进程吗
多少个队列进程不是关键,关键在于取模,保证每个消费者只消费他该消费的
我之前在使用symfony框架时,这个业务的实现方案是,写个command ,计算出数据总数块id所在区间,fork 10个子进程,并把id区间传递给子进程,由子进程对数据进行处理,处理完销毁子进程,当然id不连续会有问题
我想问的是webman 启动的时候启动的子进程,能否由这些固定的子进程去分块处理数据
$worker->id 是进程编号,从0开始。每个进程根据自己编号执行任务
$worker->id 参考文档 https://www.workerman.net/doc/workerman/worker/workerid.html
好的,谢谢老大