Maison  >  Article  >  développement back-end  >  Comment exécuter une fonction une fois par seconde en php

Comment exécuter une fonction une fois par seconde en php

PHPz
PHPzoriginal
2023-04-19 09:15:441400parcourir

En PHP, il est parfois nécessaire d'implémenter une fonction une fois par seconde. Par exemple, vous devez interroger l’état d’un service ou traiter régulièrement des tâches associées. Cet article présentera comment implémenter une méthode d'exécution d'une fonction une fois par seconde en PHP.

Méthode 1 : Utiliser la boucle sleep et while

Le moyen le plus simple est d'utiliser la boucle sleep et while. Le code est le suivant :

function executeEverySecond($function) {
    while (true) {
        $function();
        sleep(1);
    }
}

Les paramètres de cette fonction sont les fonctions qui doivent être exécutées, qui sont exécutées une fois par seconde via la boucle while et la veille.

L'avantage d'utiliser cette méthode est que le code est simple et facile à comprendre. Mais l'inconvénient est également évident, c'est-à-dire que vous devez attendre une seconde à chaque fois et que vous ne pouvez pas contrôler l'heure avec précision.

Méthode 2 : utilisez setInterval et register_tick_function

setInterval et register_tick_function sont toutes deux des fonctions de minuterie PHP. Le premier peut exécuter régulièrement une certaine fonction et le second peut coopérer avec set_tick_function pour définir la fonction à exécuter à chaque tick. Voici le code qui utilise ces deux fonctions pour s'exécuter une fois par seconde :

function myFunction() {
    echo "Hello World!\n";
}

function executeEverySecond($function) {
    $interval = 1; //每秒执行一次
    $lastTime = microtime(true); //记录上一次执行时间

    //设置每个tick执行的函数
    register_tick_function(function() use ($function, &$lastTime, $interval) {
        $currentTime = microtime(true);
        if (($currentTime - $lastTime) >= $interval) {
            $function();
            $lastTime = $currentTime;
        }
    });

    //启动定时器
    declare(ticks = 1) {
        setInterval(function() {}, 1);
    }
}

L'avantage d'utiliser cette méthode est qu'elle peut contrôler plus précisément le temps d'exécution par seconde, mais l'inconvénient est que le code est légèrement plus compliqué.

Méthode 3 : Utiliser pcntl_alarm

pcntl_alarm est une fonction de minuterie de PHP Vous pouvez définir une minuterie pour déclencher le signal SIGALRM après une heure spécifiée. Vous pouvez capturer le signal via pcntl_signal et exécuter la fonction spécifiée. Voici le code qui utilise pcntl_alarm pour s'exécuter une fois par seconde :

function myFunction() {
    echo "Hello World!\n";
}

function executeEverySecond($function) {
    pcntl_signal(SIGALRM, $function);

    while (true) {
        pcntl_alarm(1);
        sleep(1);
    }
}

L'avantage d'utiliser cette méthode est que le code est simple et que le temps peut être contrôlé avec plus de précision. L'inconvénient est que vous devez faire attention aux signaux et. sécurité des processus.

Ci-dessus sont trois méthodes pour exécuter une fonction une fois par seconde en PHP. Selon les différents besoins, différentes méthodes peuvent être choisies pour y parvenir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn