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?
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?
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?
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?
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.
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.
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.
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
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
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
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.
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)...
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.
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/
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 ?
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/
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
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...
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
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
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.
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
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.
Andréï wrote:
Donc, si je comprend bien, la solution d'un service qui exécute les
scripts qu'on lui soumet n'existe pas.
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.
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
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é.
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
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
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.
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.