OVH Cloud OVH Cloud

Préempter un script Perl

9 réponses
Avatar
doctor kreizler
bonjour,
Je cherche un moyen de préempter un script Perl.
Je ne suis pas un spécialiste du Perl et je cherche donc un peu de
documentation sur le sujet.


Pour le moment, je n'ai rien trouvé pouvant m'aider...
Alors, avez vous quelques idées qui pourraient m'orienter dans ce projet ?!

Peut-être qu'il éxiste déjà des choses sur ce sujet...

Merci beaucoup.

dr_kreizler.

9 réponses

Avatar
Paul GABORIT
À (at) Tue, 25 Nov 2003 18:51:39 +0100,
"doctor kreizler" écrivait (wrote):
Je cherche un moyen de préempter un script Perl.
Je ne suis pas un spécialiste du Perl et je cherche donc un peu de
documentation sur le sujet.


Pour le moment, je n'ai rien trouvé pouvant m'aider...
Alors, avez vous quelques idées qui pourraient m'orienter dans ce projet ?!


Plein d'idées. Mais...

Pourriez-vous nous décrire votre besoin plutôt qu'une solution que vous croyez
être la bonne sans être capable de la mettre en oeuvre ?

Merci.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
doctor kreizler
Les besoins ?
En gros, arrêter un script Perl afin qu'il puissent être repris plus tard
sur une autre machine. i.e, pouvoir sauvegarder le contexte du script à
n'importe quel moment afin qu'ils puissent être repris plus tard. Préempter
donc.

Je tiens à préciser que mon projet consiste à: "trouver un moyen de
préempter un script Perl" et non pas: " peut-on faire autrement que
préempter un script dans notre cas". Vous l'aurez compris, j'ai pas le
choix.

Des idées ? très bien, vous avez peut-être oublié de les soumettre ?

dr_kreizler.

PS: "...une solution que vous croyez être la bonne sans être capable de la
mettre en oeuvre ? " : un jugement ? Très utile.




"Paul GABORIT" a écrit dans le message de
news:

À (at) Tue, 25 Nov 2003 18:51:39 +0100,
"doctor kreizler" écrivait (wrote):
Je cherche un moyen de préempter un script Perl.
Je ne suis pas un spécialiste du Perl et je cherche donc un peu de
documentation sur le sujet.


Pour le moment, je n'ai rien trouvé pouvant m'aider...
Alors, avez vous quelques idées qui pourraient m'orienter dans ce projet
?!



Plein d'idées. Mais...

Pourriez-vous nous décrire votre besoin plutôt qu'une solution que vous
croyez

être la bonne sans être capable de la mettre en oeuvre ?

Merci.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>



Avatar
Michel Rodriguez
doctor kreizler wrote:
Les besoins ?
En gros, arrêter un script Perl afin qu'il puissent être repris plus tard
sur une autre machine. i.e, pouvoir sauvegarder le contexte du script à
n'importe quel moment afin qu'ils puissent être repris plus tard. Préempter
donc.

Je tiens à préciser que mon projet consiste à: "trouver un moyen de
préempter un script Perl" et non pas: " peut-on faire autrement que
préempter un script dans notre cas". Vous l'aurez compris, j'ai pas le
choix.


Je savais pas que ca s'appelait preempter, pour moi preempter c'est lie
au noyau de l'OS qui preempte une tache...

Sinon pour un script en general je vois pas de moyen de faire ca. Il est
possible, dans le script, de sauvegarder les donnees necessaires a la
reprise, en utilisant soit Storable, soit FreezeThaw, soit YAML (du plus
puissant/lie a l'OS et a la version de Perl, au moins puissant mais plus
portable). Mais ca doit etre prevu dans le script au depart, ca ne peut
pas se rajouter apres. Et bien sur ca ne sauvegarde pas tout.

D'ailleurs autoriser des reprises aleatoires est impossible dans le cas
general. Meme Perl 6 qui sera beaucoup plus avance en ce domaine ne
pourra pas tout faire. Si je me souviens bien Dan Sugalski doit avoir
quelque chose la dessus dans son blog a http://www.sidhe.org/~dan/blog/
ou sur une des mailing list Perl6 ou Parrot. En gros le contexte d'un
script est potentiellement trop vaste pour etre sauvegarde.

--
Michel Rodriguez
Perl &amp; XML
http://www.xmltwig.com

Avatar
Paul GABORIT
À (at) Thu, 27 Nov 2003 13:52:32 +0100,
"doctor kreizler" écrivait (wrote):
Les besoins ?
En gros, arrêter un script Perl afin qu'il puissent être repris plus tard
sur une autre machine.


Savez-vous faire cela avec autre chose que Perl (du C, de l'assembleur, du
python... ce que vous voulez) et cela quelque soit les machines considérées et
le système utilisé, l'état du process, etc. ? Si oui, je suis intéressé par
une description de la méthode utilisée.

i.e, pouvoir sauvegarder le contexte du script à
n'importe quel moment afin qu'ils puissent être repris plus tard. Préempter
donc.


C'est *votre* définition de "préempter" (qui d'ailleurs ne correspond pas à
celle donnée plus haut puisque pour faire cela, il suffit d'utiliser les
signaux STOP et CONT - si vous êtes sous Unix ou équivalent mais ça on ne le
sait pas encore).

Je tiens à préciser que mon projet consiste à: "trouver un moyen de
préempter un script Perl" et non pas: " peut-on faire autrement que
préempter un script dans notre cas". Vous l'aurez compris, j'ai pas le
choix.


J'en doute... mais bien sûr ce n'est que mon avis ;-)

Des idées ? très bien, vous avez peut-être oublié de les soumettre ?


Ce n'était pas un oubli... c'était volontaire ! Je connais X moyens de
répondre un peu au besoin que vous venez de décrire vaguement ci-dessus mais
chacun à ses avantages et ses inconvénients et aucun ne fonctionne dans tous
les cas.

dr_kreizler.

PS: "...une solution que vous croyez être la bonne sans être capable de la
mettre en oeuvre ? " : un jugement ? Très utile.


Un jugement ? Pas du tout ! Juste des faits que vous avez énoncés vous-même
dans votre message initial. Je cite : "Je ne suis pas un spécialiste du Perl"
puis "Pour le moment, je n'ai rien trouvé pouvant m'aider...".

Puisque vous ne voulez pas nous décrire plus précisement votre besoin réel et
que vous persistez à croire que la "préemption" (selon votre définition) est
la seule et unique solution alors je vous réponds de manière tout aussi
péremptoire : ce n'est pas possible ;-)

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Eric Masson
"DK" == doctor kreizler writes:






DK> Les besoins ? En gros, arrêter un script Perl afin qu'il puissent
DK> être repris plus tard sur une autre machine. i.e, pouvoir
DK> sauvegarder le contexte du script à n'importe quel moment afin
DK> qu'ils puissent être repris plus tard. Préempter donc.

Ben non, cela ne s'appelle pas préempter (pour peu que ce terme existe),
certains OS appellent cela du checkpointing ou pose de points de
reprise.

DK> Je tiens à préciser que mon projet consiste à: "trouver un moyen de
DK> préempter un script Perl" et non pas: " peut-on faire autrement que
DK> préempter un script dans notre cas". Vous l'aurez compris, j'ai pas
DK> le choix.

Donnez plus d'infos et on verra, pour le moment cela ressemble surtout à
un gros problème de design de l'application.

Eric Masson

--
CN > J'ai enseigné l'algorythmique.
GLG> C'est quoi l'algorythmique ? Une contrebasse programmée en Algol ?
-+- in : <http://www.le-gnu.net> - Neuneu fait ses gammes. -+-





Avatar
doctor kreizler
"Michel Rodriguez" a écrit dans le message de
news:bq4td9$8bd$

Sinon pour un script en general je vois pas de moyen de faire ca. Il est
possible, dans le script, de sauvegarder les donnees necessaires a la
reprise, en utilisant soit Storable, soit FreezeThaw, soit YAML (du plus
puissant/lie a l'OS et a la version de Perl, au moins puissant mais plus
portable). Mais ca doit etre prevu dans le script au depart, ca ne peut
pas se rajouter apres. Et bien sur ca ne sauvegarde pas tout.



Je vais me documenter sur ce que vous venez de me conseillez dans un permier
temps.
Oui, "prévu dans le script au départ".. je pensais à prendre le script
source afin de le documenter: donner les informations nécessaires premettant
la "préemption" ( avec vos remarques meta physiques, je ne sais plus comment
appeller l'opération souhaitée: voir en bas ). Mais je pense que cette étape
va être très lourde à gérer. Vous en pensez quoi ?!

D'ailleurs autoriser des reprises aleatoires est impossible dans le cas
general. Meme Perl 6 qui sera beaucoup plus avance en ce domaine ne
pourra pas tout faire. Si je me souviens bien Dan Sugalski doit avoir
quelque chose la dessus dans son blog a http://www.sidhe.org/~dan/blog/
ou sur une des mailing list Perl6 ou Parrot. En gros le contexte d'un
script est potentiellement trop vaste pour etre sauvegarde.



D'accord, au moins, ici, j'ai une réponse claire, Perl ne permet pas pour le
moment de reprendre un script interrompu.
Ce qui semble normal puisque pour le moment, il n'y a rien de prévu pour
sauvegarder le contexte. ( et on se demande pourquoi ils implémenteraient
cette fonctionalité dans perl.. ).

Je vous remercie beaucoup. Je suis déjà un peu plus avancer qu'auparavant.



------ !! [H.S] !! ------


Je savais pas que ca s'appelait preempter, pour moi preempter c'est lie
au noyau de l'OS qui preempte une tache...


Je suis bien d'accord avec vous. " Préempter ", ça se passe bien au niveau
du noyau ( le dispatcher and co ). Mais, étant donné que ce que j'essaie de
faire ici ressemble étrangement à ce qu'effectue le dispatcher... pourquoi
ne pas appeller ça "préempter" ( même si on se situe dans le couches
supérieures )??? En effet, je souhaite interrompre le script ( qui pourrait
être comparé à un processus... ), et je souhaite sauvegarder le contexte de
ce script ( tout comme le dispatcher sauvegarde le contexte du processus
actif ) afin de reprendre le script plus tard. A défaut d'avoir un terme
aproprié, par analogie avec ce que qui se passe au niveau du noyeau,
j'appelle ça " préempter un script ". Peut-être avez-vous un terme mieux
adapté pour cette opération ? ( je suis preneur ).

Avatar
dominix
doctor kreizler wrote:
Les besoins ?
En gros, arrêter un script Perl afin qu'il puissent être repris plus
tard sur une autre machine. i.e, pouvoir sauvegarder le contexte du
script à n'importe quel moment afin qu'ils puissent être repris plus
tard. Préempter donc.



en dehors du terme preempter que je ne comprend pas dans ce contexte
j'aimerais savoir si la fonctionnalite recherché doit relever du program-
me lui même qui controle ses structures de données, auquel cas je
l'associerais aux fonctions de persistence orthogonale ...
(genre Tangram, storable ...)

Je tiens à préciser que mon projet consiste à: "trouver un moyen de
préempter un script Perl" et non pas: " peut-on faire autrement que
préempter un script dans notre cas". Vous l'aurez compris, j'ai pas le
choix.


ou si cela est plutot "system driven" auquel cas le besoin est proche du
concept du dump/undump, mais la il y en a beaucoup qui cherche et les pistes
ne sont pas legion (voir chez Bell-labs ? cf Advanced Perl Programming),
mais si c'est possible ce ne sera certainement pas cross platform :-(

--
dominix

Avatar
Rafael Garcia-Suarez
Michel Rodriguez wrote in fr.comp.lang.perl :

Perl a quelques capacites d'introspection, les tables des symboles des
differents packages utilises sont disponibles. Il est plus dur
(impossible? je pense, quelqu'un plus familier que moi dans le domaine
aura plus d'info) d'acceder aux variables lexicales et locales.


Les variables lexicales sont accessibles avec PadWalker :

http://search.cpan.org/~robin/PadWalker-0.10/PadWalker.pm

(Un "pad" est un tableau où perl stocke les variables lexicales.)

Les variables local()isées sont dans la table des symboles, leurs
anciennes valeurs sont dans la pile lexicale prévue à cet effet.

Restent potentiellement les descripteurs de fichiers, le temps, les
nombres aleatoires, les bases de donnees... j'en oublie surement (sans
meme parler des threads ou des processus forke's).


Les piles, les arbres d'opérations résultant de la compilation des
sources, les pads maintenus par les closures, les variables globales des
interpréteurs (voir intrpvar.h dans les sources de perl), l'état des
variables magiques (et il y en a un paquet, voir perlvar), l'état des
opérateurs flip/flop, les variables d'environnement, les descripteurs de
fichiers ouverts, ... et j'oublie volontairement les threads.

En fait c'est un probleme qui est en general assez simple a traiter pour
un script specifique, mais a mon avis quasi impossible dans le cas general.


A mon avis si on veut faire efficacement des programmes qui offrent ce
genre de fonctionnalité freeze/thaw, il faut utiliser un langage et un
interpréteur conçus dans cette optique.

--
It's not a can of worms, it's a tank of shai-hulud. -- Jarkko Hietaniemi

Avatar
Michel Rodriguez
doctor kreizler wrote:

Je vais me documenter sur ce que vous venez de me conseillez dans un permier
temps.
Oui, "prévu dans le script au départ".. je pensais à prendre le script
source afin de le documenter: donner les informations nécessaires premettant
la "préemption" ( avec vos remarques meta physiques, je ne sais plus comment
appeller l'opération souhaitée: voir en bas ). Mais je pense que cette étape
va être très lourde à gérer. Vous en pensez quoi ?!


Perl a quelques capacites d'introspection, les tables des symboles des
differents packages utilises sont disponibles. Il est plus dur
(impossible? je pense, quelqu'un plus familier que moi dans le domaine
aura plus d'info) d'acceder aux variables lexicales et locales.

Restent potentiellement les descripteurs de fichiers, le temps, les
nombres aleatoires, les bases de donnees... j'en oublie surement (sans
meme parler des threads ou des processus forke's).

En fait c'est un probleme qui est en general assez simple a traiter pour
un script specifique, mais a mon avis quasi impossible dans le cas general.

Tu peux chercher un peu dans les mailing lists Perl 6
(http://dev.perl.org/perl6/list-summaries/ est la liste des resumes,
sinon http://groups.google.com/groups?group=perl.perl6.internals donne
perl6 internals et
http://groups.google.com/groups?group=perl.perl6.language donne la liste
langage).

Regarde par exemple la discussion (71 messages!) sur juste comment
"dumper" une table des variables avec Parrot (cherche "dump hard" sur
perl6 internal). En plus une des conclusions est que dans le cas ou on
utilise des threads, il est impossible de garantir l'execution du dump,
un deadlock peut se produire.

Note d'ailleurs que meme quand le noyau change de contexte ca pose des
problemes qui doivent etre resolus par le code applicatif: transactions
pour les BD, "locking" de fichiers (jamais simple)...

--
Michel Rodriguez
Perl &amp; XML
http://www.xmltwig.com