Position actuelle: Accueil> Derniers articles> Utilisez Time_nanosleep pour implémenter le traitement par lots avec des barres de progression

Utilisez Time_nanosleep pour implémenter le traitement par lots avec des barres de progression

gitbox 2025-05-29

Lorsque vous effectuez des opérations par lots en PHP, vous rencontrez généralement la nécessité de montrer la progression de l'utilisateur pendant le processus de traitement. Utilisez la fonction Time_nanosleep pour obtenir un contrôle du sommeil de haute précision, simulant ainsi l'effet de mise à jour de la barre de progression pendant le traitement par lots. Cet article présentera comment utiliser Time_nanosleep combiné avec une barre de progression de ligne de commande simple pour implémenter les opérations de traitement par lots avec des invites de progrès.


1. Introduction à Time_nanosleep

Time_nanosleep est une fonction utilisée dans PHP pour interrompre l'exécution du programme. Il permet au programme de suspendre le temps aux niveaux du deuxième et de la nanoseconde, dans le format comme suit:

 bool time_nanosleep(int $seconds, int $nanoseconds);
  • $ secondes : entier secondes

  • $ nanosecondes : nanosecondes, 1 seconde = 1 milliard de nanosecondes

Comparé au sommeil et au sommeil , Time_nanosleep offre un contrôle de temps de précision plus élevé, adapté aux scénarios où une attente à grain fin est requise.

2. Idées de mise en œuvre des barres de progression

  1. Définissez le nombre total d'étapes de traitement, tels que 100.

  2. Une fois que chaque partie de la tâche est traitée, l'affichage de la barre de progression de mise à jour s'affiche.

  3. Le temps de traitement de chaque étape est simulé via Time_nanosleep pour une démonstration facile.

3. Exemple de code

Le code suivant montre comment utiliser Time_nanosleep pour implémenter une barre de progression de la ligne de commande.

 <?php
$totalSteps = 50; // Nombre total d&#39;étapes
$barWidth = 40;   // Largeur de la barre de progression

echo "Démarrer une opération par lots...\n";

for ($i = 1; $i <= $totalSteps; $i++) {
    // Simuler le temps de traitement des tâches,Dormir50millisecondes
    time_nanosleep(0, 50 * 1000000); 

    // Calculer le pourcentage de progrès
    $progress = $i / $totalSteps;
    $filledLength = round($barWidth * $progress);

    // Construire une chaîne de barre de progression
    $bar = str_repeat("=", $filledLength) . str_repeat(" ", $barWidth - $filledLength);

    // Barre de progrès de sortie et pourcentage,utiliser "\r" Retour au début de la ligne,Implémenter des mises à jour dynamiques
    printf("\r[%s] %.2f%%", $bar, $progress * 100);
    flush();
}

echo "\nLe fonctionnement par lots est terminé!\n";

Analyse de code

  • Utilisez Time_nanosleep (0, 50 * 1000000) pour suspendre le programme pendant 50 millisecondes, simulant le temps de traitement par étape.

  • Utilisez \ r pour contrôler les caractères pour revenir au début de la ligne pour réaliser un rafraîchissement dynamique de la barre de progression.

  • Printf produit des barres et des pourcentages de progrès formatés.

  • Flush () garantit que la sortie est affichée dans le temps.

4. Développez la pensée

  • Si la tâche par lots est une véritable opération, le sommeil peut être remplacé par la logique d'exécution de la tâche spécifique.

  • Combiné avec des journaux de sortie ou des messages d'erreur, il est plus propice au débogage et à la surveillance.

  • $ Barwidth et le temps de sommeil peuvent être ajustés pour contrôler l'effet d'affichage et la vitesse de rafraîchissement de la barre de progression.

5. Ressources de référence

Une documentation plus officielle sur Time_nanosleep peut être vue:

 https://gitbox.net/manual/en/function.time-nanosleep.php