现在的业务场景是: 每10分钟运行一次,先从mysql读取url列表,然后访问这些url,把每个url返回的数据存起来。
现在我在用的办法是crondtab定时,10分钟运行一次,循环读取每个url的数据,这样量多的时候就慢了。
我现在想用workerman实现定时,多进程,就是一次读取多个url,这样就快很多,但是刚接触workerman,完全没有思路。主要是不理解用php多进程处理。
哪位大神能给个思路,或者哪个开源的是类似这样的。
这个是网上查到的,用swoole实现的,我想要的就是这样的 这个是把10个url分成5组,每组跑2个 <?php /**
刚好最近准备用workerman想开源个定时任务系统,给你说下思路吧,你可以启动两个worker,一个是用来跑定时任务的,到时间把数据取出来。另一个worker是用来执行任务,这个你worker子进程count可以开多些,然后定时任务把数据取出来用异步通信把数据发给执行任务的worker
这个是网上查到的,用swoole实现的,我想要的就是这样的
这个是把10个url分成5组,每组跑2个
<?php
/**
/
$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[($i2)]);
$res2 = execCurl($url_arr[($i*2+1)]);
echo $res1.PHP_EOL.$res2;
}
function execCurl($url){
sleep(2);
return "handle ".$url." finished";
}
刚好最近准备用workerman想开源个定时任务系统,给你说下思路吧,你可以启动两个worker,一个是用来跑定时任务的,到时间把数据取出来。另一个worker是用来执行任务,这个你worker子进程count可以开多些,然后定时任务把数据取出来用异步通信把数据发给执行任务的worker