OVH Cloud OVH Cloud

argument en défaveur de python

25 réponses
Avatar
Andréï
Salut,
je vien de m'apercevoir d'un truc qui peut potentielement déranger au
sujet de python.
lorsque l'on lance plusieurs programmes python, on se retrouve avec
autant d'interpréteurs en mémoire.
Ca peut devenir rapidement génant:
imaginez que vous ayez une dizaine de miniprogrammes en cours, ca fait
tout de suite 15Mo x 10 occupé en mémoire.

Ni aurait'il pas un moyen de lancer python une fois pour toute en
service/deamon qui permettrait d'exécuter tous les programmes?

10 réponses

1 2 3
Avatar
R12y
On Mon, 28 Nov 2005 09:05:58 +0100, Andréï wrote:

Salut,


Salut,

Ni aurait'il pas un moyen de lancer python une fois pour toute en
service/deamon qui permettrait d'exécuter tous les programmes?


Réponse pas technique mais "logique"
Quand je lance plusieurs petit scripts shell aussi il y a au tant de
/bin/bash qui se lancent.
Quand j'ai plusieurs conecxion à mon serveur apache, il y a autant de
processes apache qui sont lancés...

Peux-tu nous rappeler ton OS et comment tu calcules la mémoire occupée?

--
Rakotomandimby Mihamina,
http://aspo.rktmb.org/activites/infogerance
Serveurs* sous Debian, Fedora...
(*) Serveurs!?: http://fr.search.yahoo.com/search?p=serveurs+dedies

Avatar
Andréï
On Mon, 28 Nov 2005 09:05:58 +0100, Andréï wrote:

Salut,


Salut,

Ni aurait'il pas un moyen de lancer python une fois pour toute en
service/deamon qui permettrait d'exécuter tous les programmes?


Réponse pas technique mais "logique"
Quand je lance plusieurs petit scripts shell aussi il y a au tant de
/bin/bash qui se lancent.
Quand j'ai plusieurs conecxion à mon serveur apache, il y a autant de
processes apache qui sont lancés...

Peux-tu nous rappeler ton OS et comment tu calcules la mémoire occupée?


J'utilise windaube icspet bien sur (obligation pour le boulot).
Pour le calcul j'ai synthétiser volontairement.
voici un exemple concret:
10 prog pythons lancés:
j'appuis sur [ctrl][alt][suppr]
dans l'onglet processus, je trouve 10 fois l'interpréteur en mémoire
10 864 Ko
4 660 Ko
15 248 Ko
3 804 Ko
14 128 Ko
11 124 Ko
18 256 Ko
18 402 Ko
15 272 Ko
9 668 Ko

la taille de chacun varie pas mal dans le temps.

J'aurais pensé au départ que python se lancait une fois, et qu'il
exécutait les programmes suivants en thread.


Avatar
Richard Delorme
Salut,
je vien de m'apercevoir d'un truc qui peut potentielement déranger au
sujet de python.
lorsque l'on lance plusieurs programmes python, on se retrouve avec
autant d'interpréteurs en mémoire.
Ca peut devenir rapidement génant:
imaginez que vous ayez une dizaine de miniprogrammes en cours, ca fait
tout de suite 15Mo x 10 occupé en mémoire.

Ni aurait'il pas un moyen de lancer python une fois pour toute en
service/deamon qui permettrait d'exécuter tous les programmes?


Non, aucun intérêt. Voici la taille des binaires sous Linux¹ :
/usr/bin/python2.4 6564 octets
/usr/lib/libpython2.4.so.1.0 1006612 octets


L'exécutable de python est minuscule, 6 Ko, et presque tout le code (1
Mo) est dans une bibliothèque partagée. L'intérêt de cette bibliothèque
partagée, c'est qu'elle n'est présente qu'une fois en mémoire et
partagée entre les différentes instances de python.
Par contre, pour chaque programme python, il faut allouer de la mémoire
pour l'interpréter, et que l'on exécute un seul python en daemon ou
plusieurs ne changera rien à cela. A noter que, chez moi, cette mémoire
fait à peine 5 Mo et non 15 Mo pour un petit programme.

¹sous Windows-XP c'est le même principe :
c:Program FilesPython 2.4python.exe 4608 octets
c:WINDOWSsystem32python24.dll 1867776 octets

--
Richard

Avatar
Laurent Pointal
Andréï wrote:
Salut,
je vien de m'apercevoir d'un truc qui peut potentielement déranger au
sujet de python.
lorsque l'on lance plusieurs programmes python, on se retrouve avec
autant d'interpréteurs en mémoire.
Ca peut devenir rapidement génant:
imaginez que vous ayez une dizaine de miniprogrammes en cours, ca fait
tout de suite 15Mo x 10 occupé en mémoire.

Ni aurait'il pas un moyen de lancer python une fois pour toute en
service/deamon qui permettrait d'exécuter tous les programmes?


Si tu as un script qui plante ou qui commence à bouffer tout le CPU et
que tu veux stopper brutalement, tu seras sûrement heureux qu'ils soient
exécutés dans des process différents.

Maintenant, si tu veux exécuter plusieurs scripts dans le même process,
il y a les threads... (assures-toi juste que tes scripts ne se marchent
pas dessus en modifiant des objects communs sans utiliser de verrous)...

A+

Laurent.

Avatar
Hervé Cauwelier
J'utilise windaube icspet bien sur (obligation pour le boulot).
Pour le calcul j'ai synthétiser volontairement.
voici un exemple concret:
10 prog pythons lancés:
j'appuis sur [ctrl][alt][suppr]
dans l'onglet processus, je trouve 10 fois l'interpréteur en mémoire


Mais ça ne donne pas les segments de mémoire partagée ?

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
Do Re Mi chel La Si Do
Salut, aussi !


Sur mon Windows-XP, gratiné maison (j'aime pas la daube, c'est un plat dont
seuls les linuxiens parlent), un process Python prend entre 3400 ko et 16500
Ko (selon les scripts et les librairies chargées).

Comme Laurent Pointal, si tu veux lancer des scripts en parallèle, dans le
même processus, le mieux, c'est de passer par les threads.

Si le souhait est plutôt de lancer les scripts successivement, cela peut
être réalisé en Python, ou avec un Batch.

Mais, je vais signaler une autre possibilité, purement Python+Windows :
utiliser un serveur COM en Python. Vu que Python est un langage dynamique,
il est possible de réaliser un script, résident en mémoire, qui lance
d'autres scripts, dans le même processus, ou dans d'autres. ExecFile, Exec,
le module new, notamment, permettent de faire cela.

En plus, il sera même possible de lancer les scripts Python depuis la
plupart des applications windows, et même de dialoguer avec eux.

Mais, pour tout ça, il faudra quand même développer un peu beaucoup...


@-salutations
--
Michel Claveau
Avatar
Andréï
Mais, je vais signaler une autre possibilité, purement Python+Windows :
utiliser un serveur COM en Python. Vu que Python est un langage dynamique, il
est possible de réaliser un script, résident en mémoire, qui lance d'autres
scripts, dans le même processus, ou dans d'autres. ExecFile, Exec, le module
new, notamment, permettent de faire cela.

En plus, il sera même possible de lancer les scripts Python depuis la plupart
des applications windows, et même de dialoguer avec eux.

Mais, pour tout ça, il faudra quand même développer un peu beaucoup...


Donc, si je comprend bien, la solution d'un service qui exécute les
scripts qu'on lui soumet n'existe pas. Et comme je suis un débutant, je
devrais attendre qu'un courageux le fasse. :'(

En attendant, le langage Python est tellement bien, que j'éviterais de
m'en préoccuper.

bye bye :D

Avatar
Laurent Pointal
Andréï wrote:
Donc, si je comprend bien, la solution d'un service qui exécute les
scripts qu'on lui soumet n'existe pas.


Ca peut être une grosse faille de sécurité...

Gaffe.

Avatar
Michel Claveau
Re !

Un serveur COM est, pour le genre d'utilisation que tu veux en faire,
équivalent à un service.

La principale différence, c'est qu'un service s'exécute indépendamment
de l'utilisateur (il est chargé avant l'authentification).

Alors qu'un serveur COM est chargé lorsqu'il est appelé, puis se
décharge, lorsque plus utilisé.

Aussi, la façon d'appeler (d'utiliser) un service ou un serveur COM
varie.
Et puis, les services ont des limitations. Par défaut, les services
s'exécutent sous le compte SYSTEM, qui n'a pas accès aux ressources
partagées.


Ceci dit, il y a, dans Windows, tout ce qu'il faut pour tranformer en
service n'importe quel script. Même un batch peut être utilisé comme un
service. Voir SRVANY sur google, ou là :
http://www.commentcamarche.net/processus/srvany-exe.php3

Mais, avant de se lancer dans ce genre de truc, il vaut mieux connaitre
un peu de programmation-système.


Sinon, PyWin (win32all) permet de créer des services windows en Python.
Il y a même un exemple. Mais je n'ai pas essayé.


@-salutations

MCI


--
@-salutations

Michel Claveau
Avatar
Michel Claveau
Bonjour !

Ca peut être une grosse faille de sécurité...


Les services ont des limitations. Par défaut, ils s'exécutent sous le
compte SYSTEM, qui n'a pas accès aux ressources partagées.

AMHA, il n'y a pas plus de risques, que d'avoir Python.exe sur sa
machine.
D'ailleurs, la quasi-totalité des logiciels de protection n'analysent
pas les fichiers/scripts .py Il suffit de les mettre en pièce jointe
d'un e-mail, pour s'en rendre compte.

Y'en a qu'on essayé, ils ont eu des problèmes !

@+

MCI



--
@-salutations

Michel Claveau

1 2 3