LINUX.ORG.RU

Таймер

 


0

1

Стоит задача вызывать некоторую функцию через некоторый промежуток времени (динамически меняется), и делать такое много раз, причем параллельно.

На нормальном языке создал новый объект, поставил колбек, сказал «спать столько» и готово. Как такое сделать на php?

Попытался заюзать AzaThread, создал поток, в котором вызвался sleep на нужное время, но паралелиться не хочет.


Нестандартная задача для пхп. Думаю, можно запускать скрипт через supervise и чтоб он умирал через какое-то время, которое можно выставить через max_execution_time прямо из скрипта. Запустить это в столько параллельных потоков, в сколько хочется.

heisenberg ★★ ()

А эта вызываемая функция выполняется длительно или ее время выполнения пренебрежимо мало по сравнению с типичной задержкой между функциями?

Просто можно было бы сформировать структуру, содержащую имя функции, параметры и момент времени выполнения, а потом в основном цикле, имеющем минимальный sleep, проверять, какие функции пора выполнить. На правах велосипеда.

amomymous ★★★ ()

причем параллельно
На нормальном языке создал…

Э... У нас много языков со встроенным параллелизмом? o_O

А если к системным функциям обращаться, то будет что-то типа такого:

function delayed_start($timeout, $callback)
{
    if($child_pid = pcntl_fork())
        // Это родительский процесс, возвращаем PID потомка
        return $child_pid;

    // это потомок
    sleep($timeout);
    call_user_func($callback);
}

delayed_start(3, function() { echo "Yes 1!\n"; });
delayed_start(5, function() { echo "Yes 2!\n"; });

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

delayed_start(3, function() { echo «Yes 1!\n»; });

а если во время вызова этой функции где-то оказался открытым мьютекс? или файловая блокировка?

кто это будет закрывать? родительский процесс, или дочерний процесс? или оба (два раза, пытаться)?

# здесь я намекаю на то что форкать надо ВСЕГДА ДО того как основной алгоритм программы начал работать, а не в произвольный случайный момент работы программы.

## Google Chromium — например форкает в произвольный момент времени — но для этого у него запущен специальный процесс «Зигота» .. процесс «Зигота» занимается только тем что форкает себя (и больше ни чего другого не делает).

user_id_68054 ★★★★★ ()
Последнее исправление: user_id_68054 (всего исправлений: 6)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.