Auteur Sujet: Script python lancé en double, pourquoi  (Lu 10309 fois)

0 Membres et 1 Invité sur ce sujet

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #12 le: 18 octobre 2020 à 22:59:32 »
je ne vois rien d'inquiétant dans le script concernant les performances si ce n'est que tu ouvre & ferme une connexion SQL pour chaque écriture en base. Si le flot d'évènements est faible ca ne doit pas poser de problème. A moins d'un memory leak ?

Il faut diagnostiquer ce qui se passe dans le Pi, notamment l'utilisation de la mémoire et du cpu. La commande 'top' est la base pour cela, ou sinon installer 'htop' ou mieux encore 'glances'.

C'est quel soft qui fait le site web mono utilisateur ?

Après un Pi 1b c'est peut-être trop léger pour tout cela quand même.

J'ai créé mon site même, sans passer par un soft, juste en programmant en php/css.

Le Pi 1B est certes léger, mais cela a fonctionné pendant des années, mais peut-être avais-je optimisé un paramètre, que ce soit sur le rasp en général ou pour mysql.

La commande top me renvoi une très faible utilisation du processeur, ainsi que de la RAM.

J'ai pu alléger en partie mon script mais je suis bloqué pour des requêtes mysql d'insertion faisant appel à d'autres variables.

Avant j'avais ceci :
#Connexion à la Bdd mysql
                cursor = conn.cursor()
                loggit = "INSERT INTO commande_inconnue (date_releve, commande) VALUES (%s, %s)"
                cursor.execute(loggit, (Date, DataDecode))
                conn.commit()
                cursor.close()
                conn.close()

car les variables à insérer dans la bdd doivent être inscrite via VALUES (%s, %s), puis appelées dans cursor.execute(loggit, (Date, DataDecode)).
Mais je ne parviens pas à le faire avec une fonction et je ne trouve pas de doc sur comment intégrer des variables dans une requête sql via une fonction.
Celle où je pense me rapprocher le plus est celle-ci, car la valeur transmise n'est pas bonne, mais au moins c'est une erreur sql et non python :
loggit = "INSERT INTO température_demandée (date_releve, pièce, température, timemysql, jour) VALUES (%s, %s, %s, %s, %s)"
commandeSQL(loggit%(Date, int(3), TemperatureBureauDemandee, int(Timestamp), Date)) #ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '21:48:27, 3, 16.0, 1603050507, 2020-10-18 21:48:27)' at line 1

Malgré toutes mes tentatives, j'obtiens toujours une erreur :
TypeError: commandeSQL() takes 1 positional argument but 6 were given
TypeError: not enough arguments for format string
SyntaxError: invalid syntax
AttributeError: 'tuple' object has no attribute 'encode'

Je ne sais pas si je dois créer une fonction contenant plusieurs paramètres, ou si c'est la manière de coder les infos à transmettre qui n'est pas bon.

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #13 le: 18 octobre 2020 à 23:07:28 »
Oui d'où ma question 'quel soft qui fait le site web mono utilisateur'. On ne sait pas trop ce qui tourne dans son Pi.

Actuellement sur mon pi j'ai ceci :
- Nginx : reverse-proxy ssl let'sencrypt pour 4 sous-domaines (un localhost et 3 accès sur d'autres périphériques du réseau)
- Apache2 : mon site web créé de toute pièce en php/xhtml-css) (le localhost ci-dessus)
- Webmin : pour l'interface graphique du Rasp
- des scripts python pour la domotique (tous lancé via crontab, mais un seul tourne en permanence, celui que l'on regarde actuellement). Les autres sont des MAJ d'horaire du serveur domotique, de vérif du bon fonctionnement du script tournant h24, de MAJ de la bdd une fois par jours...)
- Wireguard (merci à toi kgersen !) Mais il va falloir que je m'y remette dessus, car ipv6 ne fonctionne tjrs pas sur mon Windows10 alors qu'avec les mêmes paramètres il fonctionne sur mon Samsung S8 et que j'ai toujours pas accès à mes périphériques réseaux une fois activé depuis W10, alors que cela fonctionne là aussi avec mon S8.

Et il faudra que je réinstalle RF24 afin d'avoir un 2ème script python qui tourne h24 pour récupérer la température/humidité d'un mini arduino.

Rien de bien méchant, en sommes, et tout fonctionnait parfaitement il y a de ça quelques mois. :(

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #14 le: 18 octobre 2020 à 23:17:34 »
Je viens de lancer un script python basique
#!/usr/bin python3
# coding: utf8
from datetime import date, timedelta, datetime
import re, time, socket, mysql.connector

#Paramètres de la connexion à la base de données Mysql
config = {
    'user': 'XXXXX',
    'password': 'XXXXX',
    'host': 'localhost',
    'database': 'domotique',}

#Périodes de la variable
time.localtime()
Commande = '*#18*51*511#'
Dieze = '#'
yesterday = date.today() - timedelta(1)
Mois = '10' # date à modifier pour les imports manuels !
Jour = '19' # date à modifier pour les imports manuels !
string_date = time.strftime("%Y-" + Mois + "-" + Jour + " " + "0:0:0.00000")
date = datetime.strptime(string_date, "%Y-%m-%d %H:%M:%S.%f")
Timestamp = time.mktime(date.timetuple())

Message = Commande + Mois + Dieze + Jour + Dieze + Dieze

#Paramètres de connexion à la passerelle BUS/SCS
buffer_size =2048 #Taille du buffer se référer à la doc python sur les socket
ip_F455='192.168.XXX.XXX' #@IP de la passerelle
port_F455=XXXXX #Port pour commande opennwebnet

#ouverture du socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip_F455,port_F455))
data=s.recv(buffer_size)
DataDecode=data.decode('UTF-8')
print (DataDecode + " = Retour de connexion")

s.send(b"*99*9##")#ouverture d'une session COMMAND
data=s.recv(buffer_size)
DataDecode=data.decode('UTF-8')
print (DataDecode + " = Retour d'ouverture de commande")

MessageEncode = Message.encode('UTF-8')
s.send(MessageEncode)
print (Message + " = Commande envoyée")

retour = ""
 
while True:
    try:
        data=s.recv(buffer_size)
        if data:
            retour += data.decode('UTF-8')
            if retour[-6:] == "*#*1##":
                break
        else:
            s.close()
            break
    except:
        print("error")
        s.close()
        break
 
data = {}
   
pattern = "(\*\#\d+\*\d+\*\d+#\d+\#\d+\*\d+\*\d+\#{2})"
for result in re.findall(pattern, retour):
    result = result[2:-2].split("#")[2].split("*")
    heure = int(result[1])
    conso = int(result[2])
    data[heure] = conso
    print (heure)
    print (conso)
    #Connexion à la Bdd mysql
    conn = mysql.connector.connect(**config)
    cursor = conn.cursor()
 
    # Ajout d'une ligne dans la Bdd
    loggit = "INSERT INTO consommation (date_releve, timemysql, heure, watt_heure) VALUES (%s, %s, %s, %s)"
    cursor.execute(loggit, (date, Timestamp, heure, conso))
    conn.commit()
    cursor.close()
    conn.close()
Il permet de mettre à jour manuellement la conso électrique de la journée (saisi du jour et du mois dans le script).
Normalement il faut 2 secondes pour avoir les deux premières lignes (connexion et retour ACK du serveur domotique), puis en grand max 2 secondes j'ai les 25 données (1 par heure + un total).
Là il me faut plus d'une seconde pour avoir chaque retour horaire.
Avec la commande top sur une autre fenêtre ssh, j'ai le processus python par moment entre 20 et 50, mais je ne m'approche pas des 100 même avec plusieurs processus.
Peut-être que la commande top, est pas top... pour voir en direct.

Edit :
Le problème vient de mysql.
Si je lance ce même script mais sans l'enregistrement dans mysql, j'obtiens les résultats en 6,28 secondes, contre 41,81 secondes avec l'enregistrement dans mysql...

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 230
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #15 le: 19 octobre 2020 à 00:12:51 »
pour la fonction commandeSQL, adapte la pour qu'elle soit comme cursor.execute donc avec un deuxieme parametre optionnel pour passer des valeurs dans un tuple.

def commandeSQL(commande, valeurs=None):
  conn = mysql.connector.connect(**config)
  cursor = conn.cursor()
  cursor.execute(commande, valeurs)
  conn.commit()
  cursor.close()
  conn.close()
comme ca tu peux appeler commandeSQL avec un ou 2 parametres suivant les cas.

Pour le reste:
Donc ton serveur sql est aussi sur le Pi  vu que tu utilises 'localhost' dans "config".
c'est en général ce qui consomme le plus.

vu que tu as webmin tu dois pouvoir voir les stats du Pi, mémoire et cpu. regarde aussi les logs sql.

si ok niveau systeme fait un test manuel en sql direct (ligne de commande) ou via une UI style HeidiSQL pour voir ce qui se passe.
t'as peut-être une table trop grosse non indexée ou un truc du genre.


Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #16 le: 19 octobre 2020 à 22:10:18 »
Quand même ...
Nginx + pi-hole + MQTT + Zigbee2MQTT + qqs scripts basiques en cron + tunnel SSH, ça tient la charge sans problème.

Salut kazyor,

Tu as un Pi 1b+ ?
Si oui, tu pourrais faire un test avec la commande suivante "SELECT benchmark(100000000,1+2);" en ligne de commande que je puisse comparer avec le mien ?
J'obtiens :
pi@raspberrypi:~ $ mysql -u XXXXX -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 233
Server version: 10.3.23-MariaDB-0+deb10u1 Raspbian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT benchmark(100000000,1+2);
+--------------------------+
| benchmark(100000000,1+2) |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (1 min 14.436 sec)

Ce n'est pas glorieux, mais les temps indiqués sur Internet sont pour des config de pc ou vrai serveur, exemple :
- AMD 64 3200+ : 4.92 sec
- Intel Pentium 4 Dual Core (3.20 GHz) : 3.76 sec
- Intel Xeon Bi-processeurs (3.00 GHz) : 3.43 sec


pour la fonction commandeSQL, adapte la pour qu'elle soit comme cursor.execute donc avec un deuxieme parametre optionnel pour passer des valeurs dans un tuple.

def commandeSQL(commande, valeurs=None):
  conn = mysql.connector.connect(**config)
  cursor = conn.cursor()
  cursor.execute(commande, valeurs)
  conn.commit()
  cursor.close()
  conn.close()
comme ca tu peux appeler commandeSQL avec un ou 2 parametres suivant les cas.

Merci kgersen, je n'avais pas pensé à mettre le valeurs=none, j'avais seulement mis un mot quelconque.

Citer
Pour le reste:
Donc ton serveur sql est aussi sur le Pi  vu que tu utilises 'localhost' dans "config".
c'est en général ce qui consomme le plus.

Oui le serveur sql est sur le rasp, c'est vrai que j'ai oublié de le mentionner. C'était déjà le cas avant qu'il plante.

Citer

vu que tu as webmin tu dois pouvoir voir les stats du Pi, mémoire et cpu. regarde aussi les logs sql.

si ok niveau systeme fait un test manuel en sql direct (ligne de commande) ou via une UI style HeidiSQL pour voir ce qui se passe.
t'as peut-être une table trop grosse non indexée ou un truc du genre.

Je regarderai plus tard comment lire les stats et les logs.
Je viens de corriger tout mon script pour supprimer un max de ligne. Je suis passé de 1 395 à 989 lignes, soit 406 lignes d'économisées rien qu'avec une fonction.
J'analiserai plus tard si je peux encore améliorer la chose, merci beaucoup ! C'est beaucoup plus court et claire !

Ma bdd fait plus de 33 Mo, les plus grosses tables font plus de 138 000 lignes pour 4,5 Mo (une température toutes les 15 mn depuis juin 2017).
Je pense que je vais supprimer des entrées afin de ne garder que 24 températures par jours après une certaine durée d'historique (6 mois, 1 an ou autre).

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #17 le: 20 octobre 2020 à 23:07:23 »
J'ai réussi à corriger mon problème d'enregistrement de la température du bureau grace à une boucle for et re.split.

Merci pour cette solution kgersen !

Il me reste à essayer d'intégrer le relevé de consommation dans ce script python et surtout à comprendre pourquoi c'est si lent.

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #18 le: 23 octobre 2020 à 18:25:24 »
Comme certain semble l'avoir constaté sur d'autre forum, Python 3.x est beaucoup plus lent que Python 2.x.
Pour mon relevé de consommation horaire, soit 25 valeurs, j'obtiens les temps suivants :
Python 3.7 : 67,05 secondes
Python 2.7 : 4,17 secondes.

Ce poste en parle https://webdevdesigner.com/q/why-is-python-3-is-considerably-slower-than-python-2-duplicate-72236/, mais je ne vois pas ce que je peux faire pour corriger cela avec Python 3.x

Vous auriez une idée, mis à part repasser sur Python 2.7 ?

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 230
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #19 le: 23 octobre 2020 à 19:41:49 »
essai de 'profiler' pour voir ou ce situe le problème:

python3 -m cProfile -s tottime tonscript.py

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #20 le: 23 octobre 2020 à 23:41:04 »
essai de 'profiler' pour voir ou ce situe le problème:

python3 -m cProfile -s tottime tonscript.py


J'avais vu cela en cherchant des infos sur internet, mais je ne vois pas comment interpréter les infos qui en ressortent.
Entre temps, j'ai pas mal optimisé mon script, bien que je n'ai pas encore réussi à faire une fonction pour la lecture ou l'update mysql, mais j'ai pas encore assez essayer.
Et j'ai pu intégrer la conso électrique par heure dans le script.

J'ai mis à jour pip et pip3, ainsi que mysql.connector en version 8.0.22 pour python2.7 et python3.x, mais pas de changement.

Python2.7 est suffisament réactif pour que la bdd soit mise à jour avant le rechargement de la page web déclenchant l'allumage/extionction de la lumière.
Il me reste donc à obtenir de même avec python3.

Ce qui est étrange c'est que je n'avais pas cette lenteur avant en python3.

Merci encore kgersen pour toute ton aide.

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 230
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #21 le: 24 octobre 2020 à 11:17:42 »
J'avais vu cela en cherchant des infos sur internet, mais je ne vois pas comment interpréter les infos qui en ressortent.

affiche le resultat ici.

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #22 le: 25 octobre 2020 à 19:19:39 »
affiche le resultat ici.
Merci pour ton analyse kgersen !

Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      504 4461.923    8.853 4461.923    8.853 {method 'recv' of '_socket.socket' objects}
       53  134.106    2.530  134.106    2.530 {method 'read' of '_io.BufferedReader' objects}
      418    1.856    0.004    1.856    0.004 {method 'sendall' of '_socket.socket' objects}
       54    1.359    0.025    1.359    0.025 {built-in method posix.read}
      142    0.629    0.004    0.629    0.004 {built-in method builtins.print}
       54    0.494    0.009    0.494    0.009 {method 'connect' of '_socket.socket' objects}
       54    0.229    0.004    2.353    0.044 subprocess.py:1383(_execute_child)
       54    0.219    0.004    0.219    0.004 {built-in method _posixsubprocess.fork_exec}
       47    0.176    0.004    0.176    0.004 {built-in method marshal.loads}
       54    0.152    0.003    0.152    0.003 {built-in method posix.waitpid}
      442    0.146    0.000    1.410    0.003 network.py:258(recv_plain)
      530    0.141    0.000    0.190    0.000 posixpath.py:75(join)
       53    0.122    0.002    0.203    0.004 {built-in method _socket.getaddrinfo}
   137/38    0.110    0.001    0.335    0.009 sre_parse.py:475(_parse)
     8525    0.100    0.000    0.107    0.000 {built-in method builtins.isinstance}
        1    0.093    0.093 4606.402 4606.402 Enregistrement_evenements.py:3(<module>)
        4    0.090    0.022    0.114    0.028 {built-in method _imp.create_dynamic}
   262/34    0.074    0.000    0.178    0.005 sre_compile.py:71(_compile)
      530    0.074    0.000    0.309    0.001 subprocess.py:1442(<genexpr>)
      108    0.066    0.001    0.073    0.001 {built-in method io.open}
      315    0.066    0.000    2.879    0.009 connection.py:347(_send_cmd)
      531    0.066    0.000    0.101    0.000 os.py:803(fsencode)
       53    0.066    0.001  137.136    2.587 abstracts.py:365(config)
       16    0.064    0.004    0.165    0.010 enum.py:135(__new__)
      298    0.062    0.000    0.062    0.000 {built-in method posix.stat}
      365    0.061    0.000    0.114    0.000 protocol.py:241(parse_ok)
      418    0.057    0.000    0.073    0.000 network.py:74(_prepare_packets)
      131    0.057    0.000    0.172    0.001 <frozen importlib._bootstrap_external>:1356(find_spec)
       53    0.057    0.001    0.057    0.001 {method 'flush' of '_io.TextIOWrapper' objects}
      152    0.056    0.000    0.275    0.002 {built-in method builtins.__build_class__}
     2454    0.055    0.000    0.055    0.000 sre_parse.py:233(__next)
     1930    0.053    0.000    0.053    0.000 {method 'encode' of 'str' objects}
       53    0.053    0.001  136.857    2.582 utils.py:395(_parse_lsb_release_command)
      104    0.052    0.000    0.073    0.001 sre_compile.py:276(_optimize_charset)
      108    0.050    0.000    0.050    0.000 {built-in method posix.pipe}
       53    0.050    0.001    0.095    0.002 protocol.py:121(make_conn_attrs)
     1384    0.048    0.000    0.048    0.000 {built-in method _struct.unpack}
      944    0.047    0.000    0.048    0.000 {built-in method builtins.getattr}
      371    0.044    0.000    0.054    0.000 connection.py:409(_handle_server_status)
       53    0.043    0.001    0.586    0.011 cursor.py:515(execute)
       54    0.042    0.001    0.042    0.001 socket.py:139(__init__)
      624    0.042    0.000    0.053    0.000 connection.py:1238(handle_unread_result)
6839/6550    0.039    0.000    0.043    0.000 {built-in method builtins.len}
        1    0.038    0.038    0.039    0.039 {method 'read' of '_io.TextIOWrapper' objects}
      393    0.037    0.000    0.037    0.000 {method 'format' of 'str' objects}
     1890    0.036    0.000    0.054    0.000 sre_parse.py:164(__getitem__)
     2155    0.035    0.000    0.035    0.000 {built-in method _struct.pack}
       53    0.035    0.001    0.090    0.002 __init__.py:293(__init__)
       15    0.034    0.002    0.034    0.002 {built-in method _imp.create_builtin}
       53    0.033    0.001    2.204    0.042 connection.py:298(_open_connection)
       53    0.033    0.001  137.052    2.586 connection.py:114(_add_default_conn_attrs)
       53    0.033    0.001    0.272    0.005 socket.py:731(getaddrinfo)
     2112    0.033    0.000    0.079    0.000 sre_parse.py:254(get)
      418    0.032    0.000    1.963    0.005 network.py:151(send_plain)
      106    0.032    0.000    0.033    0.000 constants.py:649(get_default_collation)
      118    0.031    0.000    0.031    0.000 constants.py:618(get_info)
      733    0.031    0.000    0.032    0.000 utils.py:308(read_lc_int)
      365    0.031    0.000    0.198    0.001 connection.py:425(_handle_ok)
       53    0.030    0.001    0.098    0.002 os.py:616(get_exec_path)
      442    0.030    0.000    0.030    0.000 {method 'recv_into' of '_socket.socket' objects}
      251    0.029    0.000    0.029    0.000 {built-in method __new__ of type object at 0x3cc514}
      690    0.028    0.000    0.067    0.000 <frozen importlib._bootstrap_external>:56(_path_join)
       53    0.027    0.001    0.057    0.001 protocol.py:193(parse_handshake)
       52    0.027    0.001    0.027    0.001 {function socket.close at 0xb649f2b8}
   317/99    0.027    0.000    0.036    0.000 sre_parse.py:174(getwidth)
       53    0.027    0.001    0.834    0.016 network.py:574(open_connection)
      286    0.026    0.000    0.031    0.000 enum.py:376(__setattr__)
       13    0.026    0.002    0.088    0.007 enum.py:654(<listcomp>)
      477    0.026    0.000    0.026    0.000 {method 'endswith' of 'bytes' objects}
     4842    0.025    0.000    0.025    0.000 {method 'append' of 'list' objects}
       50    0.025    0.000  135.204    2.704 Enregistrement_evenements.py:46(commandeSQL)
      214    0.025    0.000    0.049    0.000 enum.py:70(__setitem__)
      690    0.024    0.000    0.033    0.000 <frozen importlib._bootstrap_external>:58(<listcomp>)
     2467    0.023    0.000    0.023    0.000 {method 'startswith' of 'str' objects}
      365    0.023    0.000    0.037    0.000 utils.py:65(int1store)
     1424    0.022    0.000    0.022    0.000 {built-in method posix.fspath}
       53    0.022    0.000  140.218    2.646 __init__.py:186(connect)
     1380    0.022    0.000    0.022    0.000 {built-in method builtins.hasattr}
       54    0.021    0.000    2.415    0.045 subprocess.py:656(__init__)
       53    0.021    0.000    0.212    0.004 protocol.py:81(make_auth)
       53    0.020    0.000    0.048    0.001 authentication.py:102(prepare_password)
       53    0.020    0.000    0.066    0.001 abstracts.py:615(_check_server_version)
       53    0.019    0.000  136.725    2.580 subprocess.py:431(run)
       16    0.019    0.001    0.031    0.002 enum.py:177(<setcomp>)
       53    0.018    0.000    0.181    0.003 connection.py:147(_do_handshake)
       76    0.018    0.000    0.018    0.000 {built-in method time.strftime}
      106    0.017    0.000    0.017    0.000 {method 'close' of '_io.BufferedReader' objects}
      899    0.017    0.000    0.017    0.000 {method 'get' of 'dict' objects}
      209    0.017    0.000    2.559    0.012 connection.py:633(cmd_query)
       68    0.017    0.000    0.230    0.003 <frozen importlib._bootstrap>:882(_find_spec)
       53    0.017    0.000  140.187    2.645 connection.py:63(__init__)
      365    0.017    0.000    0.053    0.000 protocol.py:146(make_command)
       53    0.017    0.000    0.359    0.007 connection.py:226(_auth_switch_request)
       47    0.016    0.000    0.028    0.001 <frozen importlib._bootstrap_external>:914(get_data)
      311    0.016    0.000    0.238    0.001 enum.py:284(__call__)
      212    0.015    0.000    0.036    0.000 socket.py:97(_intenum_converter)
       47    0.014    0.000    0.265    0.006 <frozen importlib._bootstrap_external>:793(get_code)
       86    0.014    0.000    0.637    0.007 re.py:271(_compile)
     69/4    0.014    0.000    1.964    0.491 <frozen importlib._bootstrap>:978(_find_and_load)
       53    0.014    0.000    0.014    0.000 warnings.py:493(__exit__)
      744    0.014    0.000    0.014    0.000 <frozen importlib._bootstrap>:222(_verbose_message)
       61    0.014    0.000    0.017    0.000 conversion.py:233(_str_to_mysql)
   123/34    0.013    0.000    0.342    0.010 sre_parse.py:417(_parse_sub)
       53    0.013    0.000  140.153    2.644 abstracts.py:974(connect)
      107    0.013    0.000    0.173    0.002 subprocess.py:1592(_wait)
       53    0.013    0.000  136.740    2.580 subprocess.py:351(check_output)
       54    0.013    0.000    0.017    0.000 posixpath.py:154(dirname)
       94    0.013    0.000    0.031    0.000 <frozen importlib._bootstrap_external>:271(cache_from_source)
       53    0.013    0.000    0.082    0.002 protocol.py:58(_auth_response)
      159    0.012    0.000    0.012    0.000 {method 'digest' of '_hashlib.HASH' objects}
      133    0.012    0.000    0.012    0.000 {method 'decode' of 'bytearray' objects}
       52    0.012    0.000    0.012    0.000 {method 'shutdown' of '_socket.socket' objects}
       53    0.012    0.000  136.929    2.584 utils.py:419(linux_distribution)
       53    0.012    0.000    0.482    0.009 abstracts.py:888(set_charset_collation)
       53    0.012    0.000    0.567    0.011 connection.py:958(cursor)
      298    0.012    0.000    0.016    0.000 enum.py:526(__new__)
      162    0.012    0.000    0.012    0.000 {built-in method posix.close}
       53    0.012    0.000    0.194    0.004 <frozen importlib._bootstrap_external>:1240(_get_spec)
     66/5    0.012    0.000    1.930    0.386 <frozen importlib._bootstrap>:663(_load_unlocked)
       53    0.012    0.000    0.014    0.000 abstracts.py:71(__init__)
       53    0.012    0.000  134.310    2.534 subprocess.py:895(communicate)
      610    0.011    0.000    0.011    0.000 {built-in method builtins.min}
       53    0.011    0.000    1.054    0.020 connection.py:181(_do_auth)
       53    0.011    0.000    0.012    0.000 os.py:755(decode)
       47    0.011    0.000    0.011    0.000 {method 'read' of '_io.FileIO' objects}
       53    0.011    0.000    0.035    0.001 connection.py:279(_get_connection)
        1    0.011    0.011    0.063    0.063 idna.py:3(<module>)
       53    0.011    0.000    0.011    0.000 abstracts.py:345(unix_socket)
       79    0.011    0.000    0.017    0.000 <frozen importlib._bootstrap>:157(_get_module_lock)
      508    0.011    0.000    0.011    0.000 {method 'split' of 'str' objects}
       66    0.010    0.000    0.048    0.001 <frozen importlib._bootstrap>:504(_init_module_attrs)
      209    0.010    0.000    0.125    0.001 connection.py:511(_handle_result)
     54/1    0.010    0.000 4606.402 4606.402 {built-in method builtins.exec}
        6    0.010    0.002    0.021    0.003 __init__.py:316(namedtuple)
       53    0.010    0.000    0.108    0.002 __init__.py:1123(emit)
      742    0.010    0.000    0.010    0.000 constants.py:90(flag_is_set)
       53    0.010    0.000    0.018    0.000 __init__.py:1451(findCaller)
       52    0.010    0.000    0.029    0.001 network.py:148(__del__)
      526    0.010    0.000    0.012    0.000 sre_parse.py:172(append)
      990    0.009    0.000    0.010    0.000 {method 'join' of 'str' objects}
     1474    0.009    0.000    0.009    0.000 {method 'rstrip' of 'str' objects}
      638    0.009    0.000    0.025    0.000 posixpath.py:41(_get_sep)
        1    0.009    0.009    0.009    0.009 errorcode.py:32(<module>)
      130    0.009    0.000    0.012    0.000 conversion.py:160(quote)
       53    0.009    0.000    0.010    0.000 authentication.py:519(get_auth_plugin)
      727    0.009    0.000    0.015    0.000 sre_parse.py:249(match)
       35    0.009    0.000    0.014    0.000 {method 'sub' of 're.Pattern' objects}
      130    0.009    0.000    0.036    0.000 conversion.py:179(to_mysql)
      340    0.008    0.000    0.027    0.000 {built-in method builtins.setattr}
      422    0.008    0.000    0.011    0.000 sre_parse.py:286(tell)
      598    0.008    0.000    0.011    0.000 sre_parse.py:160(__len__)
      125    0.008    0.000    0.008    0.000 {built-in method now}
      477    0.008    0.000    0.008    0.000 {method 'startswith' of 'bytes' objects}
      106    0.008    0.000    0.012    0.000 abstracts.py:671(set_client_flags)
      106    0.008    0.000    0.029    0.000 os.py:673(__getitem__)
       79    0.008    0.000    0.009    0.000 <frozen importlib._bootstrap>:78(acquire)
       53    0.008    0.000    0.008    0.000 authentication.py:63(__init__)
       13    0.008    0.001    0.205    0.016 enum.py:389(_create_)
       79    0.008    0.000    0.009    0.000 <frozen importlib._bootstrap>:103(release)
       53    0.008    0.000    0.098    0.002 __init__.py:1022(emit)
       53    0.008    0.000    0.064    0.001 abstracts.py:1143(set_converter_class)
      106    0.008    0.000    0.052    0.000 conversion.py:60(set_charset)
      159    0.007    0.000    0.007    0.000 constants.py:464(get_default)
       34    0.007    0.000    0.599    0.018 sre_compile.py:759(compile)
       53    0.007    0.000    0.010    0.000 protocol.py:127(<listcomp>)
      215    0.007    0.000    0.008    0.000 enum.py:26(_is_dunder)
      100    0.007    0.000    0.009    0.000 sre_parse.py:343(_escape)
       53    0.007    0.000    0.254    0.005 __init__.py:1361(debug)
     69/4    0.007    0.000    1.960    0.490 <frozen importlib._bootstrap>:948(_find_and_load_unlocked)
       53    0.007    0.000    0.011    0.000 network.py:564(__init__)
     1531    0.007    0.000    0.007    0.000 {method 'isupper' of 'str' objects}
       52    0.007    0.000    0.019    0.000 network.py:131(shutdown)
      286    0.007    0.000    0.007    0.000 sre_parse.py:111(__init__)
      130    0.007    0.000    0.011    0.000 conversion.py:132(escape)
      442    0.007    0.000    0.007    0.000 {method 'extend' of 'bytearray' objects}
      106    0.007    0.000    0.009    0.000 os.py:751(encode)
      104    0.006    0.000    0.008    0.000 sre_compile.py:249(_compile_charset)
      159    0.006    0.000    0.046    0.000 constants.py:673(get_charset_info)
       53    0.006    0.000    0.312    0.006 abstracts.py:775(autocommit)
      364    0.006    0.000    0.010    0.000 socket.py:81(<lambda>)
      366    0.006    0.000    0.010    0.000 socket.py:91(<lambda>)
      103    0.006    0.000    1.842    0.018 connection.py:1034(_execute_query)
       53    0.006    0.000    0.279    0.005 cursor.py:322(__init__)
       53    0.006    0.000    0.006    0.000 authentication.py:134(<listcomp>)
       66    0.006    0.000    0.013    0.000 <frozen importlib._bootstrap>:318(__exit__)
      365    0.006    0.000    0.011    0.000 socket.py:86(<lambda>)
      320    0.006    0.000    0.006    0.000 {method 'find' of 'bytearray' objects}
      363    0.006    0.000    0.010    0.000 socket.py:76(<lambda>)
       33    0.006    0.000    0.006    0.000 {built-in method _abc._abc_init}
       35    0.006    0.000    0.073    0.002 cursor.py:423(_process_params)
       32    0.006    0.000    0.006    0.000 sre_compile.py:413(<listcomp>)
       53    0.006    0.000    0.123    0.002 __init__.py:1575(callHandlers)
      214    0.006    0.000    0.007    0.000 enum.py:34(_is_sunder)
       53    0.006    0.000    0.050    0.001 utils.py:375(_parse_lsb_release)
      107    0.006    0.000    0.179    0.002 subprocess.py:985(wait)
       34    0.006    0.000    0.056    0.002 sre_compile.py:536(_compile_info)
      160    0.006    0.000    0.006    0.000 {built-in method _hashlib.openssl_sha1}
      624    0.006    0.000    0.006    0.000 abstracts.py:360(can_consume_results)
      103    0.006    0.000    0.006    0.000 cursor.py:351(_reset_result)
      636    0.006    0.000    0.006    0.000 abstracts.py:836(unread_result)
       51    0.006    0.000    0.008    0.000 <frozen importlib._bootstrap_external>:574(spec_from_file_location)
       53    0.006    0.000    0.006    0.000 warnings.py:474(__enter__)
      245    0.005    0.000    0.037    0.000 <frozen importlib._bootstrap_external>:74(_path_stat)
      106    0.005    0.000    0.520    0.005 connection.py:785(cmd_ping)
      130    0.005    0.000    0.005    0.000 cursor.py:79(__call__)
      514    0.005    0.000    0.005    0.000 {method 'rpartition' of 'str' objects}
       53    0.005    0.000    0.008    0.000 warnings.py:181(_add_filter)
       53    0.005    0.000    0.008    0.000 idna.py:147(encode)
      170    0.005    0.000    0.006    0.000 <frozen importlib._bootstrap>:416(parent)
       47    0.005    0.000    0.183    0.004 <frozen importlib._bootstrap_external>:523(_compile_bytecode)
       53    0.005    0.000    0.094    0.002 __init__.py:1481(makeRecord)
     47/5    0.005    0.000    1.923    0.385 <frozen importlib._bootstrap_external>:722(exec_module)
      138    0.005    0.000    0.013    0.000 sre_compile.py:423(_simple)
       53    0.005    0.000    0.021    0.000 posixpath.py:144(basename)
       54    0.005    0.000    0.013    0.000 subprocess.py:1329(_get_handles)
       53    0.005    0.000    0.015    0.000 cursor.py:466(_handle_result)
       53    0.005    0.000    0.005    0.000 abstracts.py:636(<listcomp>)
      103    0.005    0.000    0.134    0.001 connection.py:334(close)
      286    0.005    0.000    0.005    0.000 {method 'get' of 'mappingproxy' objects}
        3    0.005    0.002    0.030    0.010 conversion.py:378(row_to_python)
      106    0.005    0.000    0.007    0.000 utils.py:273(read_string)
       53    0.005    0.000    0.024    0.000 conversion.py:50(__init__)
       53    0.005    0.000    0.246    0.005 __init__.py:1496(_log)
       50    0.005    0.000    0.095    0.002 connection.py:712(cmd_quit)
       53    0.005    0.000    0.021    0.000 __init__.py:606(format)
       50    0.005    0.000    0.009    0.000 cursor.py:441(_handle_noresultset)
    66/65    0.005    0.000    0.205    0.003 <frozen importlib._bootstrap>:576(module_from_spec)
       53    0.005    0.000    0.007    0.000 cursor.py:140(__init__)
        1    0.004    0.004    0.052    0.052 tokenize.py:21(<module>)
       34    0.004    0.000    0.352    0.010 sre_parse.py:919(parse)
       53    0.004    0.000    0.798    0.015 abstracts.py:954(_post_connection)
       53    0.004    0.000    0.066    0.001 __init__.py:1011(flush)
  181/167    0.004    0.000    0.193    0.001 <frozen importlib._bootstrap>:1009(_handle_fromlist)
      138    0.004    0.000    0.006    0.000 {built-in method builtins.any}
      167    0.004    0.000    0.004    0.000 {method 'decode' of 'bytes' objects}
       53    0.004    0.000    0.004    0.000 __init__.py:371(getMessage)
       53    0.004    0.000    0.005    0.000 protocol.py:52(_connect_with_db)
       53    0.004    0.000    0.118    0.002 __init__.py:892(handle)
     23/5    0.004    0.000    0.005    0.001 {built-in method _abc._abc_subclasscheck}
       32    0.004    0.000    0.011    0.000 sre_compile.py:411(_mk_bitmap)
       53    0.004    0.000    0.004    0.000 __init__.py:432(format)
       53    0.004    0.000    0.004    0.000 network.py:99(__init__)
       65    0.004    0.000    0.007    0.000 sre_parse.py:84(opengroup)
      176    0.004    0.000    0.007    0.000 enum.py:18(_is_descriptor)
       53    0.004    0.000    0.005    0.000 genericpath.py:117(_splitext)
       53    0.004    0.000    0.128    0.002 __init__.py:1521(handle)

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 230
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #23 le: 25 octobre 2020 à 19:35:13 »
c'est en python2 ou 3 cette trace ? poste les 2 versions eventuellement.