ITPub博客

首页 > IT职业 > IT图书 > 开发源码--php实现多线程

开发源码--php实现多线程

IT图书 作者:shinez 时间:2021-09-09 09:16:44 0 删除 编辑

折腾了一个礼拜,终于把任务给提交了;上面给我的任务是在linux下实现定时任务和自动任务,这个定时任务和自动任务有可能会发生并发,所以不得不考虑多线程。我在网上也找了很多资料貌似不符合我的需求,最后结合前辈的智慧和自己的专研,还是实现了; 
public function testa() { 
        $id = $_REQUEST['id']; 
        for($i=0;$i            
        } 
        $time = time(); 
        $data['time'] = $time; 
        M('test')->add($data); 
    } 

    public function testb() { 
        $id = $_REQUEST['id']; 
        $time = time(); 
        $data['time'] = $time; 
        M('test')->add($data); 
    } 
php本生是不支持多线程的,如果想要上面2个方法执行的时间相同,我采用了curl,一下是curl并行这2个方法的代码 
本部分设定了隐藏,您已回复过了,以下是隐藏的内容 
//加载一个多进程CURL实例 
$mh = curl_multi_init(); 
$handles = array(); 
$array=array("localhost:1001/index.php/test/testa","localhost:1001/index.php/test/testb"); 
foreach($array as $k=>$v) 
{ 
// 创建一个单线程CURL实例 
$ch = curl_init(); 
// 设置CURL相关参数 
curl_setopt($ch, CURLOPT_URL, $v); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
// 将该进程加载到实例中 
curl_multi_add_handle($mh,$ch); 
// 加入循环数组中 
$handles[] = $ch; 
} 
// 执行CURL多线程实例 
$running=null; 
do 
{ 
curl_multi_exec($mh,$running); 
// 间隔0.25S 
//usleep (250000); 
} while ($running > 0); 
// 获取采集内容 
for($i=0;$i{ 
curl_multi_remove_handle($mh,$handles[$i]); 
} 
//关闭实例 
curl_multi_close($mh);

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3127/viewspace-2801693/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-30

  • 博文量
    0
  • 访问量
    934