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

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

kyo

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

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

本人在做優(yōu)雅退出時是通過重寫stopAII實現(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

521 2 0
2個回答

walkor 打賞

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

// 默認2秒
Worker::$stopTimeout = 600;

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

  • kyo 2025-06-04

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

walkor 打賞

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

posix_kill(posix_getppid(), SIGINT);

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

  • 暫無評論
??