webman 如何多进程执行某个任务

软饭工程师

问题描述

业务场景:现在我数据库有100w数据,我想全部取出来进行业务操作,比如同步es,或者调用第三方接口检查状态。
问题:单进程去处理这100万数据显然很慢,我开10个进程,每个进程处理10万数据,这样会快很多,这样在webman 中应该怎么实现,同时怎么保证这个数据不会被重复执行

469 1 1
1个回答

nitron

10个队列,取模分配

  • 软饭工程师 2023-09-22

    也就是我必须单独起10个队列进程吗

  • nitron 2023-09-22

    多少个队列进程不是关键,关键在于取模,保证每个消费者只消费他该消费的

  • 软饭工程师 2023-09-22

    我之前在使用symfony框架时,这个业务的实现方案是,写个command ,计算出数据总数块id所在区间,fork 10个子进程,并把id区间传递给子进程,由子进程对数据进行处理,处理完销毁子进程,当然id不连续会有问题

  • 软饭工程师 2023-09-22

    我想问的是webman 启动的时候启动的子进程,能否由这些固定的子进程去分块处理数据

  • walkor 2023-09-22
    public function onWorkerStart($worker) {
        echo $worker->id;
    }

    $worker->id 是进程编号,从0开始。每个进程根据自己编号执行任务

    $worker->id 参考文档 https://www.workerman.net/doc/workerman/worker/workerid.html

  • 软饭工程师 2023-09-24

    好的,谢谢老大

🔝