L'appel d'une fonction dans un thread d'arrière-plan / processus (fork)
J'ai un code qui est un peu comme ceci:
($i=0; $i < 100; $i++)
{
do ($foo[$i]);
}
Ci-dessus est une période intensive de la tâche, et j'espérais être en mesure de créer une fonction, et de l'appeler deux fois, comme ci-dessous
function wrapper($start;$end)
{
($i=$start; $i < $end; $i++)
{
do ($foo[$i]);
}
}
//have both of these run in parallel
wrapper(0,50);
wrapper(51,100);
J'ai regardé Gearman, mais je ne peux pas l'utiliser comme je ne peux pas installer le gearman serveur (depuis que je suis sur un serveur partagé). Il semble que la façon d'y parvenir serait par bifurquer. J'ai essayé de lire beaucoup sur le sujet, mais de documentation et de soutien sont peu nombreuses. Toute aide /filaire code serait appréciée.
Pour définir ma question, comment pourrais-je appeler wrapper()
en passant des arguments tels qu'il s'exécute dans un processus enfant. Aussi, il est important que je sois en mesure d'enregistrer une fonction de rappel.
Détails supplémentaires: PHP 5.3, en cours d'exécution sur un serveur Linux. Script est exécuté par le cgi-fcgi.
Je pense que c'est comment je suis censé lancer un processus enfant, mais comment puis-je l'utiliser pour frayer les multiples processus enfants? Et comment puis-je enregistrer une fonction de rappel?
$pid = pcntl_fork();
if ( $pid == -1 ) {
//Fork failed
exit(1);
} else if ( $pid ) {
//The parent process
//should I repeat this same code here to spawn another child process?
} else {
//the child process
//can I call wrapper from here and will it run in this child process?
Vous devez vous connecter pour publier un commentaire.
De "Tudor Barbu du blog professionnel"
(http://blog.motane.lu/2009/01/02/multithreading-in-php/)
Télécharger Thread.php
join
capacité de la bibliothèque, devrait être assez simple à faire.Si vous utilisez Linux, vous pouvez profiter de la ligne de commande et ne
Cela va créer une nouvelle instance de PHP dans le fond et de se détacher de la fonction exec dans le thread principal.
Avertissement:
Le seul inconvénient est que vous ne pouvez pas contrôler ce que ces fils ne sont une fois qu'ils sont créés.