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

關(guān)于優(yōu)雅退出的問題及解決方案

kyo

如何實(shí)現(xiàn)優(yōu)雅退出呢

由于項(xiàng)目上需要在業(yè)務(wù)執(zhí)行完成后才退出,本人的實(shí)現(xiàn)方式是在一個叫master的子進(jìn)程中監(jiān)聽業(yè)務(wù)進(jìn)程,在所有業(yè)務(wù)完成后再退出master的子進(jìn)程,但由于框架的退出時是不分次序直接退出,導(dǎo)致業(yè)務(wù)進(jìn)程還在執(zhí)行,而master的子進(jìn)程已經(jīng)退出,無法完成完整業(yè)務(wù)

本人在做優(yōu)雅退出時是通過重寫stopAII實(shí)現(xiàn),測試發(fā)現(xiàn)派生的子類的stopAII并未執(zhí)行,檢查過框架源碼理應(yīng)能正常執(zhí)行,能否幫忙看看呢

public static function stopAll($code = 0, $log = '') {
    Log::info('child Worker', 'stopAll');

    if (\DIRECTORY_SEPARATOR === '/' && static::$_masterPid === posix_getpid()) {
        Log::info('master', 'stopAll');
        parent::stopAll($code, $log);
    } else {
        if ($log) {
            static::log($log);
        }
        static::$_status = static::STATUS_SHUTDOWN;
        // Execute exit.
        $workers = array_reverse(static::$_workers);
        foreach ($workers as $worker) {
            if (!$worker->stopping) {
                $worker->stop();
                $worker->stopping = true;
            }
        }
        if (!static::$_gracefulStop) {
            static::$_workers = array();
            if (static::$globalEvent) {
                static::$globalEvent->destroy();
            }
            try {
                Log::info('exit Worker', '111111111111');
                exit($code);
            } catch (\Exception $e) {
            }
        }
    }
}

能否在框架層面增加類似reload的逐個退出,同時可以定義退出的順序(能提供是最好的)

或者這個退出判斷能否加個自定義的回調(diào)來控制

if (!static::$_gracefulStop|| ConnectionInterface::$statistics['connection_count’]<=0)

又或者能否解決到子類的stopAlI無法觸發(fā)的問題

@walkor

172 2 0
2個回答

按照你的需求不用那么麻煩,代碼里設(shè)置

// 默認(rèn)2秒
Worker::$stopTimeout = 600;

這樣所有子進(jìn)程會一直等待所有阻塞業(yè)務(wù)執(zhí)行完畢才退出,最多等600秒。

  • kyo 2天前

    這個不是只在普通退出才有用嗎?且測試過的確無法滿足需求,按照框架目前的優(yōu)雅退出只能滿足各進(jìn)程無任何關(guān)聯(lián),就像一個請求上來開一個進(jìn)程處理即可,但本人的需求則是進(jìn)程間是有數(shù)據(jù)交互的,需要控制好進(jìn)程的退出順序

子進(jìn)程調(diào)用 stopAll() 只是停止自己(當(dāng)前子進(jìn)程)。
主進(jìn)程調(diào)用 stopAll() 是停止所有進(jìn)程。
子進(jìn)程可以通過調(diào)用

posix_kill(posix_getppid(), SIGINT);

來觸發(fā)主進(jìn)程調(diào)用 stopAll()

  • 暫無評論
??