PHP - Boucle FOR en paralllèle
phparallele
-
Gremy87 Messages postés 352 Date d'inscription Statut Membre Dernière intervention -
Gremy87 Messages postés 352 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'utilise une boucle for qui va faire appel à une fonction en php. Cette fonction me permet de rafraichir des infos entre un serveur et une BDD. En gros la fonction va établie une connexion avec une BDD et ensuite une connexion en SSH sur un serveur web. Ensuite, une comparaison de tableau entre la BDD et le retour SSH. Enfin une MAJ est effectuée sur la BDD pour que les infos soient identiques.
Cette fonction met 20 secondes à s’exécuter. Mais si je veux l'utiliser pour mettre à jour plusieurs serveurs, l’opération peut devenir très longue.
Ma question est de savoir s'il existe un moyen pour lancer dans l’exécution d'une boucle for en parallèle ou alors d’exécuter la fonction en arrière plan et quand toutes les opérations sont finies, d'avoir un rafraichissement de la page de l'utilisateur.
Voici un exemple du script et de la fonction :
Code PHP :
Merci pour vos conseils.
J'utilise une boucle for qui va faire appel à une fonction en php. Cette fonction me permet de rafraichir des infos entre un serveur et une BDD. En gros la fonction va établie une connexion avec une BDD et ensuite une connexion en SSH sur un serveur web. Ensuite, une comparaison de tableau entre la BDD et le retour SSH. Enfin une MAJ est effectuée sur la BDD pour que les infos soient identiques.
Cette fonction met 20 secondes à s’exécuter. Mais si je veux l'utiliser pour mettre à jour plusieurs serveurs, l’opération peut devenir très longue.
Ma question est de savoir s'il existe un moyen pour lancer dans l’exécution d'une boucle for en parallèle ou alors d’exécuter la fonction en arrière plan et quand toutes les opérations sont finies, d'avoir un rafraichissement de la page de l'utilisateur.
Voici un exemple du script et de la fonction :
Code PHP :
for ($i=0;$i<5;$i++) //Normalement le 5 est passé en post par l'utilisateur. { host_refresh($i) } function host_refresh($id_host) { $host_ip = bdd_ctrl_host_afficher_ip($id_host); //On met à jour les info sur l'host et sur les VM qu'ils possèdes $host_info_refresh = ssh_ctrl_host_info_refresh($host_ip); bdd_ctrl_host_update($id_host, $host_info_refresh); $host_vm_refresh = ssh_ctrl_host_vm_refresh($host_ip); bdd_ctrl_vm_host_vm_update($id_host, $host_vm_refresh); header('Location: '.$_SERVER["HTTP_REFERER"]); }
Merci pour vos conseils.
A voir également:
- PHP - Boucle FOR en paralllèle
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Easy php - Télécharger - Divers Web & Internet
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
4 réponses
Bonjour,
voila qui pourrait te mettre sur la voix.
http://www.copix.org/index.php/wiki/Thread
j'ai deja été confronté a un problème de ce type mais je n'ai jamais testé cette solution
voila qui pourrait te mettre sur la voix.
http://www.copix.org/index.php/wiki/Thread
j'ai deja été confronté a un problème de ce type mais je n'ai jamais testé cette solution
Bonjour,
Merci pour vos messages.
J'ai également trouvé un moyen de le faire mais sans faire appel à pcntl.
Voici le code que j'ai mis en place pour les personnes que ça intéresse :
Merci pour vos messages.
J'ai également trouvé un moyen de le faire mais sans faire appel à pcntl.
Voici le code que j'ai mis en place pour les personnes que ça intéresse :
if ($_GET == null) { //On récupère les infos de tous les hosts $infohost = bdd_ctrl_host_afficher_all(); //On boucle pour lancer la commande en parallèle et en même temps for ($j=0;$j<count($infohost);$j++) { exec('/usr/bin/php-cgi /var/www/html/controleur/for_en_parallele.php arg='.$infohost[$j]['id_host'] . ' > /dev/null &'); } header('Location: '.$_SERVER["HTTP_REFERER"]); } else { //On on met la fonction que l'on veut $id_host = $_GET['arg']; $host_ip = bdd_ctrl_host_afficher_ip($id_host); //On met à jour les info sur l'host et sur les VM qu'ils possèdes $host_info_refresh = ssh_ctrl_host_info_refresh($host_ip); bdd_ctrl_host_update($id_host, $host_info_refresh); $host_vm_refresh = ssh_ctrl_host_vm_refresh($host_ip); bdd_ctrl_vm_host_vm_update($id_host, $host_vm_refresh); header('Location: '.$_SERVER["HTTP_REFERER"]); }