Se connecter

Informatique

Programmation

Sujet : printf("blabla");
El_Camino
Niveau 10
13 juin 2020 à 12:45:35

Mais je crois pas qu'il y a une partie vérification intégrée

RLink
Niveau 13
13 juin 2020 à 12:50:15

Ah autant pour moi, j'ai recherché un peu mais j'ai rien trouvé :(
Merci pour ta réponse !

lokilok
Niveau 11
28 juin 2020 à 12:59:59

C'est mon PC qui a un problème ou les programmes fait en python sont vraiment super lent ? Ça me rend fou le temps que ça prend d'afficher un simple "--help" pour un programme console, il y a pas moyen d'avoir un système de cache ou je sais pas quoi pour les programmes qu'on lance souvent ?

blackapplex
Niveau 10
28 juin 2020 à 20:25:25

Ca peut être une question de hardware, d'OS, de logiciels, d'installation de python etc..
Sous ubuntu je lance très souvent des codes python et j'ai jamais aucun problème de ce genre peu importe le hardware.
Sous windows j'ai eu des soucis à une époque mais vu que j'utilise pas la console sous windows je peux pas te dire.

Sur certains programmes python (à peu près tous ce que j'ai vu) les "imports" sont situés avant la lecture d'arguments. Les imports vont lire des choses sur le disque. Si t'as un HDD lent et que les logiciels que tu lances font des imports lourds, ça m'étonnerait pas que tu ais cette lenteur. Il y a des imports comme des gros frameworks qui sont lents.
Il y a plusieurs systèmes de cache pour gérer ce genre de chose. Il y a des caches automatiques à plusieurs niveaux qui font que si tu lances systématiquement la même chose, tu devrais avoir des réponses plus rapides (cache de la RAM, cache du HDD etc.. je suis pas un expert). Pour ubuntu il y a éventuellement des logiciels que j'ai jamais eu besoin d'installer : https://doc.ubuntu-fr.org/preload

Si t'as pas de RAM, pas de cache HDD, pas de SSD, et pas un processeur très rapide, la lenteur est normale :hap:

lokilok
Niveau 11
28 juin 2020 à 21:12:11

Ryzen 1700 / 16 Go DDR4 3200 Mhz / SSD / Windows 10. Je pense que ça devrait être suffisant.

Et les programmes dont je parle je pense pas qu'ils soient si gros que ça, c'est genre youtube-dl, c'est juste pour télécharger des vidéos. Mais j'ai bien une bonne seconde avant que le programme se lance. C'est frustrant quand tu te trompes de paramètre, d'avoir un temps d'attente avant de voir le message d'erreur.

NeuroShitical
Niveau 9
29 juin 2020 à 11:09:37

Python est pas un langage rapide mais ça devrait pas se remarquer beaucoup non plus :(
Si tu connais pas, fais des timeit sur ton windows et compare sur un ubuntu par exemple, tu peux le faire assez rapidement via une clé bootable stv (voir VM)

godrik
Niveau 27
29 juin 2020 à 21:26:10

Ca vient de youtube-dl je pense qui importe une tonnes de trucs.


$ cat bla.py 
print ('hello world')
$ time python3 bla.py 
hello world

real    0m0.027s
user    0m0.012s
sys     0m0.015s
$ time python3 color_grid.py # un code interne qui a un peu de dependances
Traceback (most recent call last):
  File "color_grid.py", line 75, in <module>
    main()
  File "color_grid.py", line 14, in main
    bridges = Bridges(int(args[0]), args[1], args[2])
IndexError: list index out of range

real    0m0.312s
user    0m0.291s
sys     0m0.020s
$ time youtube-dl 
Usage: youtube-dl [OPTIONS] URL [URL...]

youtube-dl: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.

real    0m0.557s
user    0m0.506s
sys     0m0.048s

Clairement, ce qu'il se passe est que ca prends du temps de charger les bibliotheques. C'est un probleme assez classique en python, il y a assez peu de cache qui peut aider ici de facon general.

Quand l'interpreteur charge, il doit faire deux chose,
1) il doit charger les modules. Et ca prends le temps de parser les fichiers. Potentiellement, ca pourrait etre cache un peu par l'interpreteur. Mias il faudra au minimum que l'interpreteur lisent les fichiers pour calculer un hascode pour verifier si le cache est utilisable. Donc on pourrait retirer le parsing, mais la lecture est difficile a eviter (se reposer sur les date de modification est probablement une mauvaise idee.) Voir meme completement retirer si tu compile ton python. (il y a des outils pour ca, pas sur qu'ils maintiennent aussi bien que cpython).

2) il execute le script d'initialization des modules qui sont charges. Et ca c'est completement impossible a eviter sans reecrire les modules et les applications.

lokilok
Niveau 11
30 juin 2020 à 18:42:23

Potentiellement, ca pourrait etre cache un peu par l'interpreteur. Mias il faudra au minimum que l'interpreteur lisent les fichiers pour calculer un hascode pour verifier si le cache est utilisable.

Ça me dérangerait pas de devoir manuellement mettre à jour le cache quand les fichiers sont modifiés. Donc 0 vérifications ça m'irait très bien. Mais bon j'ai comme l'impression qu'il y a pas vraiment de solution toute faite et je sais pas si j'ai envie de passer trop de temps dessus.

godrik
Niveau 27
30 juin 2020 à 19:39:36

Note qu'avoir a maintenir un cache manuellement est une source d'erreur potentielle monstrueuse. Et c'est une des raisons pour laquel les gens preferent les langages interprete aux langages compile. Fondamentallement un programme compile est un cache (in spirit).

blackapplex
Niveau 10
30 juin 2020 à 19:47:21

J'ai jamais tenté mais si t'as un gros besoin, tu peux peut-être tenter de fonctionner en mode "service".
Genre tu fais un while true (avec sleep) après les imports sur un script qui "attend", et dès que tu lances un signal ce script "service" fait un exec du script que tu modifies.
Enfin si l'objectif c'est de pas faire les gros imports à chaque fois j'imagine qu'il y a des solutions.

godrik
Niveau 27
01 juillet 2020 à 03:25:55

c'est rigolo c'est truc la. J'avais ecrit une application qui marchait comme ca. L'application chargait un jeu de donne assez gros quand elle demarrait. Quelques Go en memoire et quelques index manuel. Et pour analyser le jeu de donne, tu recevait le nom d'une bibliotheque dynamique, tu fork, le pere attends la prochaine lib dynamique, le fils charge la lib dynamique et execute une fonction particuliere dedans.

Ca me permettait de tester dynamiquement differente implementation de mes algo sans avoir a recharger le jeu de donne entier a chaque fois.

C'etait rigolo.

blackapplex
Niveau 10
01 juillet 2020 à 12:36:36

Bah ouais, je suis sûr que ça peut résoudre certains problèmes mais vu que ça ressemble à un trick un peu chelou de programmation c'est pas très utilisé x)
En terme de programmation dynamique il y a tout ce qu'il faut en Python. Je fais souvent des eval() sur des données de config. Du coup dans ma config je peux dire à mon script d'importer mes fonctions en mettant le nom de la fonction, sans faire 50 if en fonction de la chaine de caractère.
Je suis sûr qu'il y a 5000 failles possibles mais le code est ultra élégant et c'est ça qui compte pour mes usages.

Après c'est quand même bizarre qu'on puisse pas gérer les imports comme on veut, avec un système de cache en RAM ou autre. Enfin vu que python est suffisament flexible, si on a besoin de lancer 500.000x un script, on met une boucle dans le script après les imports normalement. Et sinon si on a besoin de programmer plus efficacement en modifiant "online" un script, avec spyder ça se fait très bien.
Je fais toujours ça moi, je lance mes imports et ensuite j'exécute des bouts de code à la volée. Ca me permet de tester rapidement 50 codes.

Un des trucs qui me manquait en python mais qui va arriver apparemment c'est le partage de données entre processus. Ca c'est un truc souvent bloqué pour des raisons de sécurité (mon dieu un programme accède aux données d'un autre!), mais ça rendrait certaines choses tellement plus simples si c'était fait efficacement.

CumMeMaybe
Niveau 4
24 novembre 2020 à 14:04:17

up

godrik
Niveau 27
24 novembre 2020 à 18:00:58

Un des trucs qui me manquait en python mais qui va arriver apparemment c'est le partage de données entre processus. Ca c'est un truc souvent bloqué pour des raisons de sécurité (mon dieu un programme accède aux données d'un autre!), mais ça rendrait certaines choses tellement plus simples si c'était fait efficacement.

Tu ne peux pas wrapper un appel a shm_open et vivre dans un tableau?

Pseudo supprimé
Niveau 8
24 novembre 2020 à 19:50:39

ça sert à quoi printf à la place de print ?

godrik
Niveau 27
24 novembre 2020 à 19:59:37

En C, il n'y a pas print; il n'y a que printf. (Evidement, il y a write(2)).

Dans d'autres langages qui ont printf et print, en general printf forunit plus de fonctionnalite pour formatter la sortie.

Pseudo supprimé
Niveau 10
15 janvier 2021 à 08:56:20

Bonne année

El_Camino
Niveau 10
23 janvier 2021 à 16:29:28

Quand on y pense, les microservices c'est le principe de la POO adapté au web non ? :question:

godrik
Niveau 27
23 janvier 2021 à 19:39:16

j'ai envie de te dire oui. Mais fondamentallement, c'est de la decomposition. La programmation objet c'est juste un format de decomposition particulier.

Bunyan
Niveau 16
23 janvier 2021 à 19:54:07

Tu peux aussi dire que les microservices sont le pinacle (actuel) d'une architecture N-tiers.

Sujet : printf("blabla");
News événement
Jouez et tentez de remporter des places de cinéma ainsi que des goodies du film Kraven The Hunter
   Retour haut de page
Consulter la version web de cette page