Question serialisation de taches
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
Certes, mais il reste à déterminer exactement ce que l'on entend par exécution de tâches en parallèle (i.e. de multiples codes exécutés en même temps, 1 thread = 1 processeur), éxécution déterminée par le développeur.une autre solution ne serait elle pas d'exécuter les taches en parallèle avec psjob
J'ai cru comprendre que PSJob exécute des tâches multiple dans une même tranche de temps (n thread=1 ou n processeur) mais de manière asynchrone, éxécution déterminée par l'OS.
PSjob me semble être un pool de thread (c'est à dire de multiple pipeline en tâche de fond), mes explications peuvent être erronées mais je ne pense pas que PsJob soit un véritable mécanisme d'exécution de tâches en parallèle.
CQFD.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- stagepowershell
- Auteur du sujet
- Hors Ligne
- Membre junior
- Messages : 21
- Remerciements reçus 0
Merci pour vos réponses. 3 grands gourou sur le meme post
Désolé je n'avais pas vu que j'avais eu des réponses.
Oui Merci laurent pour ton lien mais pour une fois j'ai précédé une réponse.
Merci Dan pour cette proposition. Je me demande toujours ou tu vas chercher ces syntaxe de fou.Lol.
D'ailleurs c'est avec un bout de code que tu m'avais donné que je me suis débloqué.
Voici le résultat de mon travail
ça fonctionne mais bon un seul défaut meme un enorme si j'incorpore un delai dans le .waitforexit()
exemple: $toto..waitforexit(2000)
là d'une mon prog. ne se ferme pas et en plus je ne récupere plus de code retour.
Donc le script a été validé par le directeur, mais je dois bien l'avouer je n'en suis pas satisfait.(Deviendrais-je enfin propre dans mon code?^^)
Assez de bavardage voilà comment j'ai résolu mon soucis d'access^^
D'ailleurs j'attend vos critiques avec impatience
[code:1]
#********************************
#Partie Access *
#********************************
$p = new-object System.Diagnostics.Process
$psi = new-object System.Diagnostics.ProcessStartInfo
$VLST_ECOD = $false
$psi.fileName = \"c:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE\"
$psi.arguments = \"d:\t964\ex\ci\CI000.mdb\"
$p.StartInfo = $psi
if($p.Start()){
$p.WaitForExit()
$VLST_ECOD = $p.ExitCode
$VLST_ECOD |out-file \"d:\t964\ex\ci\VPci81\accesslog\"
}
$p.Dispose()
#**********************************
#Verification du fichier accesslog*
#**********************************
$VLST_FRECH = \"d:\t964\ex\ci\VPci81\accesslog\"
if(!(Test-path $VLST_FRECH)){echo \"Le fichier accesslog est introuvable donc access a planté\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append
break
}else{
echo \"fichier accesslog trouve. Verification du code retour\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append
$VLST_SELCT01= Get-Content $VLST_FRECH |Where {$_ -match \"0\"}
If($VLST_SELCT01 -eq \"0\"«»){
echo \"code retour $VLST_SELCT01\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append
}else{
echo \"Erreur!Code retour $VLST_SELCT01\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append
break
}
}
#*********************************************
#Importation des badgeages de la base equatis*
#*********************************************
set-location -path \"d:\t964\ex\ci\\"
d:\t964\ex\ci\VPci71\bin\Release\VPci71.exe ex $VSDT_DCREA
$VLDR_STATU = $lastexitcode
echo $VLDR_STATU |out-file \"$VLST_PATH1\MF501-ci81\" -Append
if($VLDR_STATU -ne '0'){echo \"Problème dans l'exécution du prog. vpci71\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append
}else{echo \"exécution du prog. vpci71 effectuee sans probleme\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append
}
[/code:1]
Merci encore pour votre aide et je vais essayer de creuser un peu du coté de ton process Dan.
Ps: L'entreprise utilise PSH V1
Connexion ou Créer un compte pour participer à la conversation.
- daniel soares
- Hors Ligne
- Membre premium
- Messages : 133
- Remerciements reçus 0
rendons a césar ce qui lui appartient je t'avais donné l'intégralité d'une solutions que Laurent m'avait apportéD'ailleurs c'est avec un bout de code que tu m'avais donné que je me suis débloqué.
sagara écrit:
ça fonctionne mais bon un seul défaut meme un enorme si j'incorpore un delai dans le .waitforexit()
je ne vois pas quand tu démarre le process
pour prévenir le script de la fin du traitement je verrai plutôt.
[code:1]
do{start-sleep -s 1} until($p.exitcode -eq 0)
[/code:1]
si j'ai tout bien compris la question, mais dans ce cas la solution d'Arnaud fait la même chose en beaucoup plus simple donc j'ai du loupé un truc
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
sagara écrit:
C'est le comportement normal, voir le SDK. Si je comprend ta démarche, n'est-ce pas un \"WaitBeforeExit\" que tu souhaites ici réaliser ?...
un seul défaut meme un enorme si j'incorpore un delai dans le .waitforexit()
exemple: $toto.waitforexit(2000)
là d'une mon prog. ne se ferme pas et en plus je ne récupere plus de code retour.
Pour ton script tu devrais paramètrer les chemins.
La variable $VLST_ECOD me semble superflue.
En lieu et place d'echo ne serais-ce pas plutôt write-host ? write-Output(alias echo) écrit dans le pipeline.
[code:1]
$VLST_SELCT01= Get-Content $VLST_FRECH |Where {$_ -match \"0\"}
If($VLST_SELCT01 -eq \"0\"«»){
[/code:1]
Ce code n'est-il pas redondant ? N'est-ce pas la valeur $null qui devrait être testée ?
Et surtout $VLST_ECOD ne contient-il pas la même information ?
pour set-location -path \"d:\t964\ex\ci\\" peut être mémoriser le path courant avec Pop-location puis le restituer en fin de traitement ( push-location) ?
pour echo $VLDR_STATU |out-file, par défaut l'écriture se fait dans le pipe, donc en plus concis : $VLDR_STATU |out-file
Et peut être éffacer le fichier \"d:\t964\ex\ci\VPci81\accesslog\" avant d'exécuter Access ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- stagepowershell
- Auteur du sujet
- Hors Ligne
- Membre junior
- Messages : 21
- Remerciements reçus 0
Je savait bien que c'était loin d'etre parfait.
Alors tout d'abord je ne connaissais pas l'existance du WaitBeforExit. Donc a appronfondir car des que mon mon import de base est terminé Access se ferme et du coup la procédure s'enchaine correctement.
Si je comprend ta démarche, n'est-ce pas un \"WaitBeforeExit\" que tu souhaites ici réaliser ?
Ce que l'on souhaite c'est fixé un temps a access. si au bout de se temps il est toujours actif alros on declare qu'il a planté.
La variable $VLST_ECOD me semble superflue.
Si ça peut te rassurer pour moi aussi elle l'est. Mais il leur faut une preuve bloc-note^^.
En lieu et place d'echo ne serais-ce pas plutôt write-host ? write-Output(alias echo) écrit dans le pipeline.
Là par contre je ne te suis pas. A quel moment?
Euh le write-output n'est pas destiné que pour de l'objet renvoyé à un autre objet?
tu parles peu etre de ce genre
[code:1]
echo \"fichier accesslog trouve. Verification du code retour\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append[/code:1]
Il est vrai que je pourrais très bien ecrire
[code:1]
\"fichier accesslog trouve. Verification du code retour\" |out-file \"$VLST_PATH1\MF501-ci81\" -Append[/code:1]
[code:1]
$VLST_SELCT01= Get-Content $VLST_FRECH |Where {$_ -match \"0\"}
If($VLST_SELCT01 -eq \"0\"«»){
[/code:1]
Ce code n'est-il pas redondant ? N'est-ce pas la valeur $null qui devrait être testée ?
Genial je suis sur la même longueur d'onde. je le trouve redondant et j'avais mis le $null comme suggeré mais je n'étais pas sur que ça soit fiable. Donc j'ai préféré procedé de cette maniere. Mais malheureusement c'est pas très propre tout ça. si tu m'indique cette voie c'est qu'elle est sans risque.
Et surtout $VLST_ECOD ne contient-il pas la même information
C'est vrai mais comme mentionné plus haut c'est une trace bloc note.Donc autant l'utilisé. Après c'est vrai que d'utilisé la variable $VLST_ECOD serait plus propre.
J'ai placé le set-location à chaque début de traitement par précaution car les deux traitements utilisent le répertoire courant.set-location -path \"d:t964exci\" peut être mémoriser le path courant avec Pop-location puis le restituer en fin de traitement ( push-location) ?
Alors que pour moi le pop et le push sont là pour faire un retour arriere retour avant. Je me trompe peu être(meme surement)
pour echo $VLDR_STATU |out-file
Exact oublie de ma part (1 de plus^^). Merci
Et peut être éffacer le fichier \"d:t964exciVPci81accesslog\" avant d'exécuter Access
C'est dans le tout début du prog. Mais je ne l'ai pas mis dans le code.
Merci quand meme de ta remarque
Hop un ti coup de laurent Dardenne et hop le script deviens une ballade
Dan le process demarre avec
[code:1]$p.Start()[/code:1]
Arnaud je crois que je vais attendre de coder plus proprement avant de poster un script
Merci à tous.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
La perfection n'est pas l'objectif de ces qq remarques, l'efficacité peut-être...merci pour toute ces réponses.
Je savait bien que c'était loin d'etre parfait.
sagara écrit:
ça tombe bien, moi non plus !Alors tout d'abord je ne connaissais pas l'existance du WaitBeforExit.
Je me suis mal exprimé, c'est une interprétation de ta démarche. Cette méthode n'existe pas, en revanche son besoin dans ton script oui.
sagara écrit:
C'est plus mieux clair en le disantCe que l'on souhaite c'est fixé un temps a access. si au bout de se temps il est toujours actif alros on declare qu'il a planté.
sagara écrit:
Je voulais pointer le fait qu'il y a un effet de bord potentiel avec cette instruction d'affichage (echo).Là par contre je ne te suis pas.
sagara écrit:
J'y vois plus un pb de cohérence que de fiabilité. Le fichier accesslog peut ne pas existé, dans ce cas get-content renverra $null.j'avais mis le $null comme suggeré mais je n'étais pas sur que ça soit fiable.
sagara écrit:
\"Prudence est mère de sûretè\".si tu m'indique cette voie c'est qu'elle est sans risque.
sagara écrit:
Non, c'était dans l'optique d'un enchaînement de script.Alors que pour moi le pop et le push sont là pour faire un retour arriere retour avant. Je me trompe peu être(meme surement)
sagara écrit:
Qui risque rien n'a rienArnaud je crois que je vais attendre de coder plus proprement avant de poster un script
Le forum Contributions est aussi un lieu d'échange...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- serialisation de taches