基于swoole实现多进程处理耗时任务

swoole提供了创建进程的简便方式,同时如果有进程池的需求,也是可以快速上手,因公司swoole较老,swoole原生提供的进程池不能使用,这里就用swoole_process实现了多进程处理耗时任务的需求。

这次的背景是这样的,有个每分钟1次的定时任务,这个定时任务启动后,会循环请求多个agent上的数据,最初的实现是通过for循环去请求各个agent的数据进行处理,这种模式有个固有缺陷,即单个agent的超时会操作后续其他agent的开始处理时间延长,而我们的业务必须是每次调度时,需要尽快把各个agent的数据处理完。

后续为了规避单个agent的超时影响,将原有的各个agent的处理拆分为多进程处理,规避了单个agent超时造成的影响。

下面的实现是每次fork进程,处理完业务后就退出了,这种模式不适合需要频繁启动进程的模式,因为太耗资源,请大家在学习时,注意抉择。

<?php
class ProcessRequestOneExistPool
{
    private $worker = [];
    private $work_num = 0;
    private $start_time = null;

    public function __construct($work_num)
    {
        $this->work_num = $work_num;
    }

    public function start($callable)
    {
        $this->start_time = microtime(true);

        for ($i=0;$i<$this->work_num;$i+
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值