Question serialisation de taches

Plus d'informations
il y a 15 ans 8 mois #2728 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:serialisation de taches
Dan écrit:

une autre solution ne serait elle pas d'exécuter les taches en parallèle avec psjob

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.
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.

Plus d'informations
il y a 15 ans 8 mois #2733 par stagepowershell
Réponse de stagepowershell sur le sujet Re:serialisation de taches
Bonjour bonjour.
Merci pour vos réponses. 3 grands gourou sur le meme post :D

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 :D

[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.

Plus d'informations
il y a 15 ans 8 mois #2734 par daniel soares
Réponse de daniel soares sur le sujet Re:serialisation de taches
sagara écrit:

D'ailleurs c'est avec un bout de code que tu m'avais donné que je me suis débloqué.

rendons a césar ce qui lui appartient je t'avais donné l'intégralité d'une solutions que Laurent m'avait apporté :)

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.

Plus d'informations
il y a 15 ans 8 mois #2735 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:serialisation de taches
Salut,
sagara écrit:

...
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.

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 ?

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.

Plus d'informations
il y a 15 ans 8 mois #2738 par stagepowershell
Réponse de stagepowershell sur le sujet Re:serialisation de taches
merci pour toute ces réponses.
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. :D

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.

set-location -path \"d:t964exci\" peut être mémoriser le path courant avec Pop-location puis le restituer en fin de traitement ( push-location) ?

J'ai placé le set-location à chaque début de traitement par précaution car les deux traitements utilisent le répertoire courant.
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 :D

Merci à tous.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 8 mois #2739 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:serialisation de taches
sagara écrit:

merci pour toute ces réponses.
Je savait bien que c'était loin d'etre parfait.

La perfection n'est pas l'objectif de ces qq remarques, l'efficacité peut-être...
sagara écrit:

Alors tout d'abord je ne connaissais pas l'existance du WaitBeforExit.

ça tombe bien, moi non plus !
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:

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é.

C'est plus mieux clair en le disant :)
sagara écrit:

Là par contre je ne te suis pas.

Je voulais pointer le fait qu'il y a un effet de bord potentiel avec cette instruction d'affichage (echo).
sagara écrit:

j'avais mis le $null comme suggeré mais je n'étais pas sur que ça soit fiable.

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.

sagara écrit:

si tu m'indique cette voie c'est qu'elle est sans risque.

\"Prudence est mère de sûretè\".
sagara écrit:

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)

Non, c'était dans l'optique d'un enchaînement de script.
sagara écrit:

Arnaud je crois que je vais attendre de coder plus proprement avant de poster un script :D

Qui risque rien n'a rien :P
Le forum Contributions est aussi un lieu d'échange...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.081 secondes
Propulsé par Kunena