Користувальницькькі налаштування

Налаштування сайту


Розділи

Загальний опис
Історія змін
Рекомендації щодо оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

stardust

Це стара версія документу!


StarDust - менеджер процесів

Слугує для відслідковування виконання процесів, що можуть відбуватись в окремих потоках.

Використання надпросте. Наприклад, коли нам треба дізнатись “а чи не виконується десь в сусідньому потоці якийсь процес?” задля того, аби забезпечити його монопольність та уникнути race condition.

    $pid = new StarDust('SOMEPROCESS');
    if ($pid->isRunning()) {
        show_warning(__('This process is already running'));
    } else {
        show_info(__('Process not running, starting it!'));
        $pid->start();
        //here we can run any part of code
        sleep(10);
        $pid->stop();
        show_success(__('Process execution finished'));
    }

ну або ж в зворотній бік перевіряючи його на notRunning

    $pid = new StarDust('SOMEPROCESS');
    if ($pid->notRunning()) {
        show_info(__('Process not running now'));
    } else {
        show_warning(__('This process is already running'));
    }

Також нам може захотітись взнати, як проходить виконання цього процесу зараз:

$processState=$pid->getState();
debarr($processState);
Array
(
    [start] => 1661962409
    [end] => 1661962419
    [realtime] => 10.00102
    [ms] => 1661962409.718
    [me] => 1661962419.719
    [finished] => 1
    [pid] => 42847
)

Що це за значення?

  • start - час початку роботи процесу в вигляді unix timestamp (int)
  • end - час завершення роботи процесу в вигляді unix timestamp. 0 - якщо виконання ще не завершено. (int)
  • realtime - реальний час виконання процесу, динамічно змінюється, якщо він ще виконується. В секундах. (float)
  • ms - час початку виконання процесу з мікросекундами. 0 - якщо триває зараз. (float)
  • me - час завершення виконання процесу з мікросекундами. 0 - якщо ще триває. (float)
  • finished - стан завершеності виконання процесу. 1 - завершено, 0 - триває зараз. (int)
  • pid - системний PID процесу в рамках якого було виконано процес, що менеджився StarDust.

та можливо визначити, які взагалі процеси там відбуваються чи відбувались і який в них поточний стан?

$allProcessStates=$pid->getAllStates();
debarr($allProcessStates);
Array
(
    [PROCESS1] => Array
        (
            [start] => 1661961554
            [end] => 1661961584
            [realtime] => 30.00125
            [ms] => 1661961554.6937
            [me] => 1661961584.6949
            [finished] => 1
            [pid] => 52597
        )

    [PROCESS2] => Array
        (
            [start] => 1661961672
            [end] => 1661961702
            [realtime] => 30.00151
            [ms] => 1661961672.1594
            [me] => 1661961702.1609
            [finished] => 1
            [pid] => 24597
        )

    [SOMEPROCESS] => Array
        (
            [start] => 1661962409
            [end] => 1661962419
            [realtime] => 10.00102
            [ms] => 1661962409.718
            [me] => 1661962419.719
            [finished] => 1
            [pid] => 54597
        )
        
    [ANOTHERPROCESS] => Array
        (
            [start] => 1661983067
            [end] => 0
            [realtime] => 0.00055
            [ms] => 1661983067.186
            [me] => 0
            [finished] => 0
            [pid] => 28737
        )

)

Також ми можемо, динамічно перемикати імена процесів (читаємо ідентифікатори) на ходу, для екземпляру StarDust за допомогою сеттера setProcess

    $processManager = new StarDust();
    $processManager->setProcess('SOMEPROCESSNAME');
    $processState=$processManager->getState();
    $processManager->setProcess('ANOTHERPROCESS');
    $anotherState=$processManager->getState();
stardust.1664019551.txt.gz · Востаннє змінено: 2022/09/24 14:39 повз 127.0.0.1