国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

循環(huán)創(chuàng)建定時(shí)器,是否會(huì)進(jìn)行排隊(duì)等待阻塞?

caption

N個(gè)群進(jìn)行發(fā)消息,視頻,圖片,文字。視頻圖片文字之間有個(gè)五秒的延遲,一開始用的sleep,導(dǎo)致時(shí)間間隔壓根不對,現(xiàn)在用定時(shí)器去操作,又遇到了定時(shí)器阻塞問題。

循環(huán)讀取群,批量往群內(nèi)去發(fā)送視頻圖片文字。請問這種情況用workman怎么寫,如果是原生php之間用sleep去寫了。但workman里面用sleep又導(dǎo)致了其他的業(yè)務(wù)阻塞。已經(jīng)用了AsyncTcpConnection

我的業(yè)務(wù)比較復(fù)雜。

15分鐘讀取機(jī)器人id,根據(jù)機(jī)器人id讀取他的群,循環(huán)發(fā)送這些群。
現(xiàn)在的寫法如下:

    public function sendRobotAllGroup($wxId,$group=[]){

        foreach ($group as $k=>$v){
            if(!$v['wechatgroup_code']){
                Db::name('wechatgroup')->where('id',$v['id'])->update(['status'=>6]);
                continue;
            }
            $send = new Send();
            $send->setGroupId($v['id']);
            //獲取內(nèi)容
            $content = $send->index();

            if($k==0){
                $space = 1;
            }else{
                $space = $k*4;
            }
            //發(fā)送
            Timer::add($space, array($this, 'sendByWxId'), [$wxId, $v['wechatgroup_code'] ,$content], false);
      //      $this->sendByWxId($wxId,$v['wechatgroup_code'],$content);

            unset($content);
            unset($send);
        }
    }

    public function sendBysWxId($fromId,$toId,$content){
        $vedio      = $content['vedio']; //視頻
        $pic_urls   = $content['pic_urls'];   //圖片
        $text       = $content['content'];        //文案
        $i = 0;
        $curr = 0;  //當(dāng)前位置  0 視頻 1 圖片 2文案
        $v_count = count($vedio);
        $p_count = count($pic_urls);
        $t_count = count($text);

        $timer_id = Timer::add(5, function()use(&$timer_id ,&$fromId, &$toId, &$vedio,&$pic_urls, &$text,&$v_count,&$p_count,&$t_count, &$i ,&$curr)
        {
            if($curr == 0){
                if($i == $v_count){
                    $i = 0;
                    $curr = 1;
                }else{
                    $this->sendVideo($fromId, $toId, $vedio[$i]);
                }
            }
            if ($curr == 1){
                if($i == $p_count){
                    $i = 0;
                    $curr = 2;
                }else{
                    $this->sendImage($fromId, $toId, $pic_urls[$i]);
                }
            }
            if ($curr == 2){
                if($i == $t_count){
                    $i = 0;
                }else{
                    $this->sendText($fromId, $toId, $text[$i]);
                }
            }
            $i++;
            if($i >= $t_count && $curr ==2){
                Timer::del($timer_id);
            }
        });

    }

現(xiàn)在應(yīng)該是遇到定時(shí)器阻塞,循環(huán)創(chuàng)建的定時(shí)器,如果前面一個(gè)定時(shí)器還沒有跑完,那下面的定時(shí)器是不是不會(huì)執(zhí)行?都要等著他執(zhí)行萬,別告訴我再來一個(gè) AsyncTcpConnection 。我已經(jīng)做了客戶端定時(shí)15分鐘發(fā)起發(fā)送請求,然后AsyncTcpConnection到服務(wù)端來處理發(fā)送了。

sendText , sendImage ,sendVideo都是curl http接口
請大神指點(diǎn)下。

3862 2 0
2個(gè)回答

barley

我的本機(jī)環(huán)境和服務(wù)器都是windows,我在測試的過程中發(fā)現(xiàn)定時(shí)器在一個(gè)進(jìn)程里應(yīng)該是串行的,如果你上一個(gè)定時(shí)器里的邏輯比較復(fù)雜,后面的定時(shí)器會(huì)等它執(zhí)行完再執(zhí)行;我現(xiàn)在也在為這個(gè)事找解決方法,我的是在時(shí)間的越往后,我的執(zhí)行越來越慢,得找大神問去了

  • caption 2020-03-20

    目前只能按 blogdaren 說的,把curl那些等待放到其他服務(wù)器操作去了,定時(shí)器里面curl調(diào)用遠(yuǎn)程接口,請求不等待。傳遞參數(shù)執(zhí)行的間隔,遠(yuǎn)程服務(wù)用sleep去等待

phpcreeper

1、sleep是系統(tǒng)調(diào)用,系統(tǒng)調(diào)用會(huì)導(dǎo)致進(jìn)程掛起,所以不要用sleep.
2、單個(gè)進(jìn)程內(nèi)業(yè)務(wù)都是串行執(zhí)行的、而且上一個(gè)定時(shí)器內(nèi)的業(yè)務(wù)要是規(guī)定時(shí)間內(nèi)沒執(zhí)行完則會(huì)等執(zhí)行完了才會(huì)繼續(xù)執(zhí)行下一個(gè)定時(shí)器內(nèi)的業(yè)務(wù),如此反復(fù)......
3、sendText , sendImage ,sendVideo都是curl http接口 這些屬于典型的繁重網(wǎng)絡(luò)IO,我認(rèn)為還是慣用的異步方案,將這些任務(wù)放到獨(dú)立的進(jìn)程組或機(jī)器上來異步處理;另你客戶端15分鐘的定時(shí)器發(fā)起請求和異步處理任務(wù)之間有什么必然關(guān)系呢?

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??