Maison  >  Article  >  cadre php  >  Parlons de la façon de mettre en œuvre des tâches planifiées dans Swoole

Parlons de la façon de mettre en œuvre des tâches planifiées dans Swoole

PHPz
PHPzoriginal
2023-03-28 10:17:352133parcourir

Swoole est un excellent framework asynchrone pour le langage PHP. Il offre aux développeurs PHP la possibilité de gérer une concurrence élevée, des performances élevées, une distribution et d'autres exigences en fournissant l'API native sous-jacente. Chez Swoole, les tâches planifiées sont une exigence très courante. Cet article explique comment implémenter des tâches planifiées dans Swoole.

1. Swoole Timer

1.1 Présentation de Swoole Timer

Swoole fournit une fonction de minuterie très pratique qui peut exécuter des tâches après une heure spécifiée. La minuterie Swoole n'utilise pas la minuterie fournie par le système, mais implémente elle-même la fonction de minuterie.

1.2 Syntaxe de Swoole Timer

Pour utiliser la minuterie Swoole, vous devez maîtriser deux fonctions :

(1) swoole_timer_tick

Cette fonction peut réaliser la tâche d'exécution de la boucle de minuterie, et la tâche sera exécutée à chaque heure spécifiée. La syntaxe est la suivante :

$timer_id = swoole_timer_tick(2000, function () {
  //这里是你要执行的任务
});

Dans le code ci-dessus, le premier paramètre 2000 de la fonction swoole_timer_tick signifie que la tâche sera exécutée toutes les 2000 ms.

(2) swoole_timer_after

Cette fonction peut implémenter une minuterie pour exécuter une tâche et l'exécuter après avoir atteint l'heure spécifiée. La syntaxe est la suivante :

$timer_id = swoole_timer_after(2000, function () {
  //这里是你要执行的任务
});

Dans le code ci-dessus, le premier paramètre 2000 de la fonction swoole_timer_after signifie qu'une tâche sera exécutée après 2000ms.

1.3 Exemple de Swoole Timer

Ce qui suit est un exemple de code qui utilise Swoole Timer pour implémenter une minuterie :

<?php
$timer_id = swoole_timer_tick(2000, function () {
echo "定时器执行任务".PHP_EOL;    
});
//延迟10秒钟后清除定时器
swoole_timer_after(10000, function () use ($timer_id){
swoole_timer_clear($timer_id);
echo "清除定时器".PHP_EOL;
});
?>

Dans le code ci-dessus, la fonction swoole_timer_tick sera exécutée toutes les 2 secondes et produira une "tâche d'exécution du minuteur". Utilisez la fonction swoole_timer_after pour créer un minuteur d'effacement de tâche qui sera exécuté après 10 secondes et affichera "minuterie d'effacement".

2. Tâche planifiée Swoole Crontab

2.1 Présentation de Swoole Crontab

En plus du minuteur, Swoole fournit également une tâche planifiée Crontab, qui peut exécuter régulièrement une tâche spécifiée.

2.2 Syntaxe Swoole Crontab

Pour utiliser Swoole Crontab, vous devez connaître les fonctions suivantes :

(1) swooleCoroutineCron::add()

Utilisez cette fonction pour ajouter une tâche planifiée. Par exemple :

$cron = new swoole\Coroutine\Cron();
$cron->add(&#39;/1 *&#39;, function () {
//这里是你要执行的任务
});
$cron->start();

Dans le code ci-dessus, une tâche planifiée est ajoutée pour exécuter la tâche spécifiée toutes les minutes.

(2) Formats d'heure pris en charge par les tâches Cron

Les tâches Cron prennent en charge les formats d'heure suivants :

Description du format :

Minutes (0-59) Heures (0-23) Jours (1-31) Mois (1 - 12) Semaine (0-7)

Parmi elles, les "semaines" 0 et 7 représentent le dimanche, et 1-6 représentent le lundi au samedi.

2.3 Exemple de Swoole Crontab

Ce qui suit est un exemple de code permettant d'utiliser Swoole Crontab pour implémenter des tâches planifiées :

<?php
$cron = new swoole\Coroutine\Cron();
$cron->add(&#39;/1 *&#39;, function () {
echo &#39;计划任务执行&#39;.PHP_EOL;
});
$cron->start();
?>

Dans le code ci-dessus, ajoutez une tâche planifiée, exécutez la tâche spécifiée toutes les minutes et affichez "exécution de tâche planifiée". .

3. Processus Swoole, tâches planifiées coroutines

En plus du minuteur et des tâches planifiées Crontab, Swoole peut également utiliser des processus ou des coroutines pour implémenter des tâches planifiées.

3.1 Tâche planifiée du processus Swoole

Les étapes pour utiliser le processus Swoole pour implémenter les tâches planifiées sont les suivantes :

(1) Créer un processus

$process = new swoole_process(function () {
//任何你想执行的任务
});

(2) Démarrer le processus

$process->start();

( 3) Réglez la minuterie

swoole_timer_tick(2000, function ($timer_id, $params) use ($process) {
if (!$process->isRunning()) {
    echo "进程已结束".PHP_EOL;
    swoole_timer_clear($timer_id);
}
});

Dans le code ci-dessus, un processus est créé, démarré, puis utilise la fonction swoole_timer_tick pour régler la minuterie du processus et vérifie si le processus est en cours d'exécution toutes les 2 secondes.

3.2 Tâche planifiée de la coroutine Swoole

Les étapes pour utiliser la coroutine Swoole pour implémenter les tâches planifiées sont les suivantes :

(1) Créer une coroutine

$cid = go(function () {
//任何你想执行的任务
});

(2) Définir la minuterie

swoole_timer_tick(2000, function ($timer_id, $params) use ($cid) {
if (!swoole_coroutine_exists($cid)) {
    echo "协程已结束".PHP_EOL;
    swoole_timer_clear($timer_id);
}
});

Dans le code ci-dessus, créez Créer une coroutine, puis utilisez la fonction swoole_timer_tick pour définir une minuterie pour la coroutine et vérifier si la coroutine s'exécute toutes les 2 secondes.

4. Résumé

Cet article présente trois méthodes pour implémenter des tâches planifiées dans Swoole : le minuteur, les tâches et processus planifiés Crontab et les tâches planifiées par coroutine. Les développeurs peuvent choisir la méthode appropriée en fonction de leurs propres besoins pour implémenter la fonction de tâche planifiée. Je pense que grâce à l'introduction de cet article, les lecteurs ont maîtrisé la méthode de mise en œuvre des tâches planifiées dans Swoole, et j'espère que cela sera utile aux lecteurs lorsqu'ils utiliseront le framework Swoole.

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