关于定时跑数据的问题

海盗船长

现在的业务场景是: 每10分钟运行一次,先从mysql读取url列表,然后访问这些url,把每个url返回的数据存起来。

现在我在用的办法是crondtab定时,10分钟运行一次,循环读取每个url的数据,这样量多的时候就慢了。

我现在想用workerman实现定时,多进程,就是一次读取多个url,这样就快很多,但是刚接触workerman,完全没有思路。主要是不理解用php多进程处理。

哪位大神能给个思路,或者哪个开源的是类似这样的。

1299 2 0
2个回答

海盗船长

这个是网上查到的,用swoole实现的,我想要的就是这样的
这个是把10个url分成5组,每组跑2个
<?php
/**

  • Created by PhpStorm.
  • User: cyw0413
  • Date: 2018/10/20
  • Time: 10:51
    /
    $url_arr = array();
    for ($i=0;$i<10;$i++){
    $url_arr[] = "www.baidu.com?wd=".$i;
    }
    echo "start:".date("Y-m-d H:i:s").PHP_EOL;
    $workers = array();
    for ($i=0;$i<5;$i++){
    $process = new swoole_process('getContents',true);
    $process->start();
    $process->write($i);
    $workers[] = $process;
    }
    //主进程数据结果
    foreach ($workers as $process){
    echo $process->read();
    echo PHP_EOL;
    }
    echo "end:".date("Y-m-d H:i:s").PHP_EOL;
    function getContents(swoole_process $worker){
    $i = $worker->read();
    global $url_arr;
    $res1 = execCurl($url_arr[($i
    2)]);
    $res2 = execCurl($url_arr[($i*2+1)]);
    echo $res1.PHP_EOL.$res2;
    }
    function execCurl($url){
    sleep(2);
    return "handle ".$url." finished";
    }
  • 暂无评论
phpxiaoxu

刚好最近准备用workerman想开源个定时任务系统,给你说下思路吧,你可以启动两个worker,一个是用来跑定时任务的,到时间把数据取出来。另一个worker是用来执行任务,这个你worker子进程count可以开多些,然后定时任务把数据取出来用异步通信把数据发给执行任务的worker

  • 暂无评论
年代过于久远,无法发表回答
🔝