Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/10/2011, 09h23   #1
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Par défaut Parallélisation pour Workflow

Bonjour à tous,

Je poste dans le sous-forum débuter car je pense que ma question est triviale pour qui connait la réponse.

Je développe pendant mes loisirs un petit moteur de workflow simple qui respecte plus ou moins la norme BPMN et j'ai un problème de parallélisation.

En gros je simplifie.
J'ai trois classes A, B et C avec une méthode run();

Voilà ce que je voudrais faire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
class A{
 
   /**
    * Lance l'étape A
    **/
   public function run(){
     $b = new B();
     //Lance $b sur un tread indépendant
     $b->run();
 
     $c = new C();
     // Lance $c sur un thread indépendant
     $c->run();
 
     ecritDansLog("FIN A");
   }
}
En gros, je voudrais que A lance B sans attendre la fin de B, puis lance C sans attendre la fin de C puis continue son exécution.

Existe t'il un moyen élégant de faire cela ?

Merci d'avance pour vos réponses
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 15h35   #2
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Après avoir approfondi mes recherches j'ai trouvé plusieurs pistes.

2 solutions simples existent pour mon besoin:

Seulement, je ne suis pas à l'aise car je voudrais pouvoir recevoir un code de retour à minima pour être sûr que la méthode est lancée (ou non).

Que me conseilleriez vous ?
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 15h56   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
regarde bien la doc des deux fonctions, dans les deux cas tu peux avoir le retour
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h34   #4
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Citation:
Envoyé par stealth35 Voir le message
regarde bien la doc des deux fonctions, dans les deux cas tu peux avoir le retour
Je sais qu'on peut avoir le retour.
Je me suis peut être mal expliqué.

Voilà comment je désirerais que cela se passe:
  • A lance B
  • B dit a A qu'il est bien lancé tout en continuant de tourner
  • A, sachant que B s'est bien lancé, continue son bonhomme de chemin et meurt l'esprit tranquille
  • B continue et peut finir avant ou après A.

Or, sans retour j'ai un mode pur Asynchrone
  • A lance B
  • A continue son bonhomme de chemin et sans savoir si B s'est bien lancé
  • B continue et peut finir avant ou après A.
  • A vit dans l'angoisse: "Comment vas B, est qu'il est bien arrivé ? Il est peut être mort ..."

Et avec retour j'ai du pur synchrone
  • A lance B
  • A poireaute le temps que B soit fini
  • B finit
  • A finit

En fait je voudrais une espèce d'"asynchrone avec accusé de réception"
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h55   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
tu peux faire ca avec proc_open et ecouter ce qui se passe avec stream_listener, mais en utilisation web c'est limité, le mieux c'est de faire un systeme de queue tasks, mais il faut le serveur qui va avec (un process php suffit)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h59   #6
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Citation:
Envoyé par stealth35 Voir le message
tu peux faire ca avec proc_open et ecouter ce qui se passe avec stream_listener, mais en utilisation web c'est limité, le mieux c'est de faire un systeme de queue tasks, mais il faut le serveur qui va avec (un process php suffit)
Il est vrai que j'aurai dû préciser du départ.
Je ne suis pas en Web.
Je suis en serveur uniquement. Mon script "Père" est lancé via un cron.
Je vais creuser la piste que tu me donnes.

Merci beaucoup pour ta réponse.
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h03.


 
 
 
 
Partenaires

Hébergement Web