think-swoole当中多协程进行访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了think-swoole当中多协程进行访问相关的知识,希望对你有一定的参考价值。

前言

在网上寻找多线程,或者相关swoole关于TP6+php8,几乎没有什么内容,只能靠自己摸索,目前的话自己可以用think-swoole里有WaitGroup类可以进行协程访问,运行速度结果还不错。

运行swoole在tp项目根目录

								php think swoole

其他命令不会生效,都只会产生这个,TP目前也没有出相关问题的解决办法 1.正式开始码代码 首先在控制器建一文件

<?php
namespace app\\controller\\v1;

use app\\BaseController;

use think\\Request;
use think\\cache\\driver\\Redis;
class Task extends BaseController

    public function index()
    
    
 

2加入在此文件下加入协程方法

public function testXie() 
        echo date(Y-m-d H:i:s) . --start.. . <br/>;//开始时间
        $n=8;//创建协程数目
        $result = [];
        $wg = new \\Swoole\\Coroutine\\WaitGroup();#此类在vender/swoole/id-helper下自己可以根据代码提示查看相关方法
        
       for($i=0;$i<$n;$i++)
                $wg->add();
                go(function() use($wg, &$result,$i)
                    $url=rand_codes(8,all);//此方法是自己封装无法展示可自行创建固定url数组
                    $result[$url[$i]]=$this->task_starts(files.$i,$url[$i]);
                    $wg->done();
                );
         
        $wg->wait();
        echo date(Y-m-d H:i:s) . --done.. . PHP_EOL;//结束时间
        dump($result);
    

3.关于其中的tasks_starts()方法:

**public function task_starts($file_addr,$url)
    
        
    	$url="";//这个是我接口请求地址因为和其他语言联动
    
    	$datas[url]=$url;
    	$datas[file_addr]=$file_addr;
        
    	
    	$info=curls($url,$datas);//curl请求数据
       
    	$info=json_decode($info,true);
        //返回信息
    	if(!$info)
    		return "参数错";
    	else
           
    			return $info[data];
    		
    	
    
    **

因为我访问的数据比较多,时间会稍微长点,不过相比于php单独访问可以为一个天一个地,而且根据我请求的数据这个访问速度已经是很快的了,大家可以以上例子进行修改,可以看看效果。最后别忘了进行运行

以上是关于think-swoole当中多协程进行访问的主要内容,如果未能解决你的问题,请参考以下文章

今天说说go多协程并发访问map导致的fatal error

golang 多协程注意事项

玩转pythonpython多协程,多线程的比较

python—多协程爬取糗事百科热图

golang 单协程和多协程的性能测试

Go中多协程协作之sync.Cond