Auteur Sujet: Script python lancé en double, pourquoi  (Lu 9071 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 #24 le: 25 octobre 2020 à 19:43:04 »
c'est en python2 ou 3 cette trace ? poste les 2 versions eventuellement.

C'est 1h de Python3.
Par contre je t'ai mis qu'environ 20 000 caractères sur les 61 000 que m'a sorti la commande.

Je lance Python2 et je posterai le retour dans une heure.
Merci kgersen

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #25 le: 25 octobre 2020 à 19:51:05 »
trop long 1 heure, on ne voit trop rien.

je parlais de tracer/profiler cela:

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 ?

si tu poste la trace des 67 secondes en python3 et celle des 4,17 secondes en python2 on verra ou est le problème.

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #26 le: 25 octobre 2020 à 21:15:14 »
trop long 1 heure, on ne voit trop rien.

je parlais de tracer/profiler cela:

si tu poste la trace des 67 secondes en python3 et celle des 4,17 secondes en python2 on verra ou est le problème.

Toutes mes excuses, je n'avais pas compris.
Voici le retour de python2.7
         32480 function calls (31507 primitive calls) in 5.790 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       45    3.716    0.083    3.716    0.083 {method 'recv' of '_socket.socket' objects}
        1    0.211    0.211    5.791    5.791 Enregistrement_evenements.py:3(<module>)
   151/40    0.133    0.001    0.382    0.010 sre_parse.py:414(_parse)
       22    0.107    0.005    0.107    0.005 {method 'sendall' of '_socket.socket' objects}
   317/36    0.089    0.000    0.203    0.006 sre_compile.py:64(_compile)
     2183    0.084    0.000    0.100    0.000 sre_parse.py:194(__next)
        2    0.074    0.037    0.074    0.037 {method 'read' of 'file' objects}
        1    0.065    0.065    0.069    0.069 socket.py:45(<module>)
        3    0.054    0.018    0.064    0.021 collections.py:305(namedtuple)
  462/192    0.039    0.000    0.046    0.000 sre_parse.py:152(getwidth)
     1428    0.038    0.000    0.064    0.000 sre_parse.py:142(__getitem__)
     1869    0.037    0.000    0.122    0.000 sre_parse.py:213(get)
        1    0.036    0.036    1.220    1.220 connection.py:30(<module>)
        2    0.032    0.016    0.044    0.022 __init__.py:1(<module>)
6836/6655    0.030    0.000    0.033    0.000 {len}
        3    0.030    0.010    0.030    0.010 {_socket.getaddrinfo}
     1759    0.027    0.000    0.029    0.000 {isinstance}
        1    0.026    0.026    0.034    0.034 __init__.py:30(<module>)
        4    0.026    0.006    0.026    0.006 {method 'connect' of '_socket.socket' objects}
   139/36    0.024    0.000    0.387    0.011 sre_parse.py:336(_parse_sub)
        1    0.023    0.023    0.052    0.052 __init__.py:24(<module>)
      116    0.022    0.000    0.039    0.000 sre_compile.py:256(_optimize_charset)
        1    0.021    0.021    0.021    0.021 hashlib.py:56(<module>)
     4213    0.020    0.000    0.020    0.000 {method 'append' of 'list' objects}
      125    0.020    0.000    0.020    0.000 {built-in method now}
        1    0.019    0.019    0.019    0.019 {posix.read}
        1    0.017    0.017    0.236    0.236 catch23.py:29(<module>)
        1    0.017    0.017    1.282    1.282 __init__.py:31(<module>)
        1    0.016    0.016    0.496    0.496 authentication.py:29(<module>)
      154    0.015    0.000    0.686    0.004 re.py:230(_compile)
      987    0.014    0.000    0.027    0.000 sre_parse.py:207(match)
        1    0.013    0.013    0.218    0.218 decimal.py:116(<module>)
        1    0.013    0.013    0.013    0.013 {function seed at 0xb66d3630}
        3    0.013    0.004    0.015    0.005 protocol.py:121(make_conn_attrs)
        1    0.013    0.013    0.074    0.074 constants.py:30(<module>)
       22    0.012    0.001    0.013    0.001 network.py:74(_prepare_packets)
       22    0.012    0.001    0.042    0.002 abc.py:86(__new__)
       27    0.012    0.000    0.012    0.000 {method 'extend' of 'bytearray' objects}
       39    0.011    0.000    0.011    0.000 {built-in method __new__ of type object at 0x29fc30}
        1    0.011    0.011    0.291    0.291 errors.py:30(<module>)
      746    0.011    0.000    0.011    0.000 {getattr}
        1    0.011    0.011    0.038    0.038 subprocess.py:31(<module>)
        2    0.011    0.005    0.011    0.005 decimal.py:1638(_fix)
      684    0.010    0.000    0.013    0.000 sre_parse.py:138(__len__)
      116    0.010    0.000    0.051    0.000 sre_compile.py:228(_compile_charset)
       23    0.010    0.000    0.010    0.000 {_codecs.utf_8_decode}
        6    0.010    0.002    0.010    0.002 {method 'settimeout' of '_socket.socket' objects}
        2    0.010    0.005    0.012    0.006 {__import__}
        1    0.010    0.010    0.049    0.049 util.py:1(<module>)
      599    0.010    0.000    0.013    0.000 sre_parse.py:150(append)
      156    0.009    0.000    0.021    0.000 sre_compile.py:428(_simple)
        1    0.009    0.009    0.273    0.273 cursor.py:30(<module>)
       22    0.009    0.000    0.131    0.006 network.py:151(send_plain)
       27    0.009    0.000    0.046    0.002 network.py:258(recv_plain)
        1    0.008    0.008    0.027    0.027 pickle.py:25(<module>)
       36    0.008    0.000    0.056    0.002 sre_compile.py:433(_compile_info)
        1    0.008    0.008    0.008    0.008 errorcode.py:32(<module>)
        1    0.007    0.007    0.172    0.172 uuid.py:45(<module>)
        1    0.007    0.007    0.010    0.010 hmac.py:4(<module>)
        1    0.007    0.007    0.011    0.011 collections.py:11(<module>)
        1    0.007    0.007    0.019    0.019 io.py:34(<module>)
        1    0.007    0.007    0.071    0.071 optionfiles.py:30(<module>)
        1    0.007    0.007    0.044    0.044 random.py:40(<module>)
        1    0.007    0.007    0.245    0.245 utils.py:30(<module>)
      645    0.007    0.000    0.007    0.000 {min}
       28    0.007    0.000    0.008    0.000 sre_compile.py:411(_mk_bitmap)
       26    0.006    0.000    0.006    0.000 {time.strftime}
        1    0.006    0.006    0.059    0.059 ssl.py:89(<module>)
        5    0.006    0.001    0.012    0.002 ssl.py:115(_import_symbols)
      112    0.006    0.000    0.008    0.000 sre_parse.py:278(_escape)
    20/15    0.006    0.000    0.014    0.001 abc.py:148(__subclasscheck__)
       36    0.006    0.000    0.669    0.019 sre_compile.py:567(compile)
       36    0.006    0.000    0.398    0.011 sre_parse.py:725(parse)
       87    0.005    0.000    0.012    0.000 abc.py:89(<genexpr>)
        1    0.005    0.005    0.064    0.064 ConfigParser.py:88(<module>)
      618    0.005    0.000    0.005    0.000 {ord}
      336    0.005    0.000    0.005    0.000 {method 'find' of 'bytearray' objects}
      768    0.005    0.000    0.005    0.000 {chr}
        3    0.005    0.002    0.030    0.010 protocol.py:81(make_auth)
      595    0.005    0.000    0.005    0.000 {method 'startswith' of 'str' objects}
        1    0.005    0.005    0.016    0.016 threading.py:1(<module>)
      317    0.005    0.000    0.005    0.000 sre_parse.py:93(__init__)
       81    0.004    0.000    0.004    0.000 _weakrefset.py:36(__init__)
      117    0.004    0.000    0.017    0.000 re.py:138(match)
        1    0.004    0.004    0.083    0.083 abstracts.py:29(<module>)
        1    0.004    0.004    0.006    0.006 base64.py:3(<module>)
        1    0.004    0.004    0.004    0.004 heapq.py:31(<module>)
       19    0.003    0.000    0.009    0.000 protocol.py:241(parse_ok)
        3    0.003    0.001    0.006    0.002 utils.py:354(_parse_os_release)
        3    0.003    0.001    0.081    0.027 abstracts.py:365(config)
       51    0.003    0.000    0.006    0.000 catch23.py:88(struct_unpack)
       78    0.003    0.000    0.003    0.000 {_struct.unpack_from}
        1    0.003    0.003    0.003    0.003 {method 'search' of '_sre.SRE_Pattern' objects}
        7    0.003    0.000    0.003    0.000 {dir}
        1    0.003    0.003    0.003    0.003 network.py:30(<module>)
      140    0.003    0.000    0.003    0.000 {method 'split' of 'unicode' objects}
      124    0.003    0.000    0.003    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
        1    0.003    0.003    0.003    0.003 {posix.popen}
        1    0.003    0.003    0.003    0.003 {method 'shutdown' of '_socket.socket' objects}
      174    0.003    0.000    0.003    0.000 collections.py:349(<genexpr>)
       17    0.003    0.000    0.139    0.008 connection.py:347(_send_cmd)
       36    0.003    0.000    0.661    0.018 re.py:192(compile)
       36    0.003    0.000    0.262    0.007 sre_compile.py:552(_code)
       78    0.003    0.000    0.003    0.000 sre_parse.py:75(opengroup)
       23    0.002    0.000    0.004    0.000 sre_parse.py:228(isname)
        3    0.002    0.001    0.018    0.006 protocol.py:193(parse_handshake)
        1    0.002    0.002    0.024    0.024 subprocess.py:900(_execute_child)
        1    0.002    0.002    0.002    0.002 conversion.py:114(MySQLConverter)
        3    0.002    0.001    0.002    0.001 __init__.py:75(CFUNCTYPE)
        1    0.002    0.002    0.002    0.002 stringprep.py:6(<module>)
        1    0.002    0.002    0.002    0.002 {posix.fork}
        3    0.002    0.001    0.007    0.002 authentication.py:102(prepare_password)
       14    0.002    0.000    0.003    0.000 __init__.py:144(_check_size)
       37    0.002    0.000    0.005    0.000 _weakrefset.py:58(__iter__)
       73    0.002    0.000    0.002    0.000 {method 'format' of 'str' objects}
        1    0.002    0.002    0.004    0.004 conversion.py:30(<module>)
      172    0.002    0.000    0.002    0.000 {_sre.getlower}
      117    0.002    0.000    0.002    0.000 {_struct.pack}
       51    0.002    0.000    0.003    0.000 {method 'encode' of 'str' objects}

Et voici celui de Python 3.7 :
         54084 function calls (52722 primitive calls) in 12.564 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        3    6.038    2.013    6.038    2.013 {method 'read' of '_io.BufferedReader' objects}
       38    3.964    0.104    3.964    0.104 {method 'recv' of '_socket.socket' objects}
       47    0.180    0.004    0.180    0.004 {built-in method marshal.loads}
   137/38    0.119    0.001    0.329    0.009 sre_parse.py:475(_parse)
        4    0.112    0.028    0.112    0.028 {built-in method posix.read}
        4    0.089    0.022    0.115    0.029 {built-in method _imp.create_dynamic}
       63    0.082    0.001    0.082    0.001 {built-in method builtins.print}
       14    0.068    0.005    0.068    0.005 {method 'sendall' of '_socket.socket' objects}
       16    0.065    0.004    0.165    0.010 enum.py:135(__new__)
   262/34    0.057    0.000    0.161    0.005 sre_compile.py:71(_compile)
      104    0.055    0.001    0.075    0.001 sre_compile.py:276(_optimize_charset)
      131    0.054    0.000    0.168    0.001 <frozen importlib._bootstrap_external>:1356(find_spec)
      152    0.051    0.000    0.260    0.002 {built-in method builtins.__build_class__}
     2454    0.049    0.000    0.049    0.000 sre_parse.py:233(__next)
        1    0.042    0.042    0.042    0.042 {method 'read' of '_io.TextIOWrapper' objects}
     1890    0.037    0.000    0.055    0.000 sre_parse.py:164(__getitem__)
     5304    0.037    0.000    0.040    0.000 {built-in method builtins.isinstance}
       15    0.034    0.002    0.034    0.002 {built-in method _imp.create_builtin}
      248    0.034    0.000    0.034    0.000 {built-in method posix.stat}
     2112    0.029    0.000    0.070    0.000 sre_parse.py:254(get)
        3    0.029    0.010    0.029    0.010 {method 'connect' of '_socket.socket' objects}
      251    0.028    0.000    0.028    0.000 {built-in method __new__ of type object at 0x3cc514}
        4    0.027    0.007    0.183    0.046 subprocess.py:1383(_execute_child)
      690    0.027    0.000    0.065    0.000 <frozen importlib._bootstrap_external>:56(_path_join)
   317/99    0.027    0.000    0.036    0.000 sre_parse.py:174(getwidth)
      286    0.026    0.000    0.031    0.000 enum.py:376(__setattr__)
        1    0.026    0.026   12.564   12.564 Enregistrement_evenements.py:3(<module>)
      214    0.025    0.000    0.051    0.000 enum.py:70(__setitem__)
      690    0.024    0.000    0.032    0.000 <frozen importlib._bootstrap_external>:58(<listcomp>)
       13    0.023    0.002    0.077    0.006 enum.py:654(<listcomp>)
      712    0.023    0.000    0.025    0.000 {built-in method builtins.getattr}
3728/3439    0.021    0.000    0.025    0.000 {built-in method builtins.len}
     4323    0.021    0.000    0.021    0.000 {method 'append' of 'list' objects}
        4    0.020    0.005    0.020    0.005 {built-in method _posixsubprocess.fork_exec}
       16    0.018    0.001    0.030    0.002 enum.py:177(<setcomp>)
     2217    0.018    0.000    0.018    0.000 {method 'startswith' of 'str' objects}
        2    0.017    0.009    0.091    0.046 {built-in method _socket.getaddrinfo}
       68    0.017    0.000    0.226    0.003 <frozen importlib._bootstrap>:882(_find_spec)
       47    0.017    0.000    0.027    0.001 <frozen importlib._bootstrap_external>:914(get_data)
     1175    0.015    0.000    0.015    0.000 {built-in method builtins.hasattr}
       47    0.015    0.000    0.271    0.006 <frozen importlib._bootstrap_external>:793(get_code)
     69/4    0.014    0.000    1.914    0.478 <frozen importlib._bootstrap>:978(_find_and_load)
       94    0.014    0.000    0.033    0.000 <frozen importlib._bootstrap_external>:271(cache_from_source)
   123/34    0.014    0.000    0.335    0.010 sre_parse.py:417(_parse_sub)
        3    0.012    0.004    0.012    0.004 {built-in method time.sleep}
     66/5    0.012    0.000    1.881    0.376 <frozen importlib._bootstrap>:663(_load_unlocked)
      744    0.012    0.000    0.012    0.000 <frozen importlib._bootstrap>:222(_verbose_message)
        2    0.012    0.006    0.013    0.006 protocol.py:121(make_conn_attrs)
       53    0.012    0.000    0.189    0.004 <frozen importlib._bootstrap_external>:1240(_get_spec)
       35    0.011    0.000    0.599    0.017 re.py:271(_compile)
        3    0.011    0.004    0.011    0.004 warnings.py:474(__enter__)
       47    0.011    0.000    0.011    0.000 {method 'read' of '_io.FileIO' objects}
       79    0.010    0.000    0.017    0.000 <frozen importlib._bootstrap>:157(_get_module_lock)
        2    0.010    0.005    0.010    0.005 cursor.py:363(_have_unread_result)
       66    0.010    0.000    0.054    0.001 <frozen importlib._bootstrap>:504(_init_module_attrs)
      100    0.010    0.000    0.010    0.000 {built-in method now}
     54/1    0.010    0.000   12.564   12.564 {built-in method builtins.exec}
      562    0.010    0.000    0.010    0.000 {built-in method builtins.min}
        6    0.009    0.002    0.020    0.003 __init__.py:316(namedtuple)
        1    0.009    0.009    0.009    0.009 errorcode.py:32(<module>)
      526    0.009    0.000    0.012    0.000 sre_parse.py:172(append)
      888    0.008    0.000    0.009    0.000 {method 'join' of 'str' objects}
      727    0.008    0.000    0.014    0.000 sre_parse.py:249(match)
        2    0.008    0.004    0.008    0.004 {method 'write' of '_io.TextIOWrapper' objects}
     1474    0.008    0.000    0.008    0.000 {method 'rstrip' of 'str' objects}
       34    0.008    0.000    0.574    0.017 sre_compile.py:759(compile)
      422    0.008    0.000    0.009    0.000 sre_parse.py:286(tell)
       13    0.007    0.001    0.207    0.016 enum.py:389(_create_)
       79    0.007    0.000    0.008    0.000 <frozen importlib._bootstrap>:78(acquire)
      598    0.007    0.000    0.010    0.000 sre_parse.py:160(__len__)
      215    0.007    0.000    0.008    0.000 enum.py:26(_is_dunder)
       79    0.007    0.000    0.008    0.000 <frozen importlib._bootstrap>:103(release)
     69/4    0.007    0.000    1.910    0.478 <frozen importlib._bootstrap>:948(_find_and_load_unlocked)
        1    0.007    0.007    0.007    0.007 {built-in method posix.uname}
      240    0.006    0.000    0.026    0.000 {built-in method builtins.setattr}
      286    0.006    0.000    0.006    0.000 sre_parse.py:111(__init__)
      104    0.006    0.000    0.008    0.000 sre_compile.py:249(_compile_charset)
      363    0.006    0.000    0.010    0.000 socket.py:76(<lambda>)
       66    0.006    0.000    0.011    0.000 <frozen importlib._bootstrap>:318(__exit__)
     1531    0.006    0.000    0.006    0.000 {method 'isupper' of 'str' objects}
       32    0.006    0.000    0.006    0.000 sre_compile.py:413(<listcomp>)
       51    0.006    0.000    0.008    0.000 <frozen importlib._bootstrap_external>:574(spec_from_file_location)
       33    0.006    0.000    0.006    0.000 {built-in method _abc._abc_init}
      320    0.006    0.000    0.006    0.000 {method 'find' of 'bytearray' objects}
       19    0.006    0.000    0.017    0.001 network.py:258(recv_plain)
      214    0.006    0.000    0.009    0.000 enum.py:34(_is_sunder)
      100    0.005    0.000    0.007    0.000 sre_parse.py:343(_escape)
     47/5    0.005    0.000    1.867    0.373 <frozen importlib._bootstrap_external>:722(exec_module)
      514    0.005    0.000    0.005    0.000 {method 'rpartition' of 'str' objects}
       34    0.005    0.000    0.054    0.002 sre_compile.py:536(_compile_info)
      245    0.005    0.000    0.038    0.000 <frozen importlib._bootstrap_external>:74(_path_stat)
      364    0.005    0.000    0.009    0.000 socket.py:81(<lambda>)
       47    0.005    0.000    0.188    0.004 <frozen importlib._bootstrap_external>:523(_compile_bytecode)
      365    0.005    0.000    0.009    0.000 socket.py:86(<lambda>)
      286    0.005    0.000    0.005    0.000 {method 'get' of 'mappingproxy' objects}
      366    0.005    0.000    0.009    0.000 socket.py:91(<lambda>)
      107    0.005    0.000    0.220    0.002 enum.py:284(__call__)
    66/65    0.005    0.000    0.212    0.003 <frozen importlib._bootstrap>:576(module_from_spec)
        1    0.005    0.005    0.051    0.051 tokenize.py:21(<module>)
      138    0.005    0.000    0.012    0.000 sre_compile.py:423(_simple)
       34    0.005    0.000    0.346    0.010 sre_parse.py:919(parse)
      176    0.004    0.000    0.007    0.000 enum.py:18(_is_descriptor)
       34    0.004    0.000    0.010    0.000 enum.py:836(__and__)
      136    0.004    0.000    0.004    0.000 {method 'split' of 'str' objects}
       47    0.004    0.000    0.006    0.000 <frozen importlib._bootstrap_external>:438(_classify_pyc)
       69    0.004    0.000    0.006    0.000 <frozen importlib._bootstrap>:58(__init__)
        8    0.004    0.000    0.004    0.001 {built-in method io.open}
       32    0.004    0.000    0.011    0.000 sre_compile.py:411(_mk_bitmap)
      443    0.004    0.000    0.004    0.000 {method 'get' of 'dict' objects}
       69    0.004    0.000    0.005    0.000 <frozen importlib._bootstrap>:176(cb)
       45    0.004    0.000    0.005    0.000 enum.py:453(_find_data_type)
       51    0.004    0.000    0.022    0.000 <frozen importlib._bootstrap_external>:369(_get_cached)
      120    0.004    0.000    0.005    0.000 <frozen importlib._bootstrap>:416(parent)
       13    0.003    0.000    0.296    0.023 enum.py:633(_convert)
      163    0.003    0.000    0.007    0.000 <frozen importlib._bootstrap_external>:1203(_path_importer_cache)
       65    0.003    0.000    0.006    0.000 sre_parse.py:84(opengroup)
Petite précision, les temps indiqués sont très légèrement supérieur sur Python 3.7 car j'ai arrêté le script avec 1 à 2 secondes de retard par rapport à Python2.7.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #27 le: 25 octobre 2020 à 21:25:55 »
et le script ?  c'est le meme que deja posté ?

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #28 le: 25 octobre 2020 à 21:48:06 »
et le script ?  c'est le meme que deja posté ?

Non en effet, voici le nouveau :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import date, timedelta, datetime
import re, time, socket, mysql.connector, os, logging, decimal

# initialize the log settings
logging.basicConfig(filename='/home/pi/Script_Cron_Domotique/log_Enregistrement_evenements.log',level=logging.DEBUG)

AllLumiere='0#'
Allume='1'
Eteindre='0'
LumiereBureau='22'
LumiereChambre='81'
LumiereCuisinePlafonnier='15'
LumiereCuisinePlanDeTravail='16'
LumiereCouloir='11'
LumiereWC='31'
LumiereSalleDeBainPlafonnier='33'
LumiereSalleDeBainMiroir='24'
LumiereSalon='17'

FenetreTiming='*2*1000#'
AllVolet='*5##'
Stop='0'
Ouverture='1'
Fermeture='2'
VoletBureau='52'
VoletChambre='51'
VoletSalon='57'
VoletBalcon='58'

TemperatureSalon='1'
TemperatureChambre='2'
TemperatureBureau='3'

Date = time.strftime('%Y-%m-%d %H:%M:%S')
Timestamp = time.time()

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

def commandeSQL(commande, valeurs=None):
  conn = mysql.connector.connect(**config)
  cursor = conn.cursor()
  cursor.execute(commande, valeurs)
  conn.commit()
  cursor.close()
  conn.close()

def lectureSQL(lecture):
  conn = mysql.connector.connect(**config)
  cursor = conn.cursor()
  cursor.execute(lecture)
  conn.commit()
  cursor.close()
  conn.close()

#Paramètres de connexion à la passerelle BUS/SCS
buffer_size = 2048
ip_F455 = 'XXX.XXX.XXX.XXX'
port_F455 = XXXXX

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

    s.send(b"*99*1##")#Ouverture d'une session COMMAND
    DataDecode=s.recv(buffer_size).decode('UTF-8')
    print (Date + " : " + DataDecode + " = Retour d'ouverture de commande")
    while True:
        DataDecode=s.recv(buffer_size).decode('UTF-8')
        for DataDecode in DataDecode.split("##"):
            if DataDecode!='':
                Date = time.strftime('%Y-%m-%d %H:%M:%S')
                Timestamp = time.time()
                print ("Webserveur :" + DataDecode)
                   
# Enregistrement des lumières ---------------------------------------------------------------------------------------------------------
                if DataDecode[0:3] == "*1*":
                    if DataDecode[5:7]==AllLumiere: # Toutes les lumières
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' "
                            commandeSQL(loggit)
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' "
                            commandeSQL(loggit)
                           
                    elif DataDecode[5:7]==LumiereBureau: # Bureau
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereBureau))
                            print (Date + " : " + DataDecode + " = Allume lumiere bureau")
                        elif DataDecode[3:4]==Eteindre:                     
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereBureau))
                            print (Date + " : " + DataDecode + " = Eteindre lumiere bureau")
                           
                    elif DataDecode[5:7]==LumiereChambre: # Chambre
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereChambre))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereChambre))
                           
                    elif DataDecode[5:7]==LumiereCuisinePlafonnier: # Cuisine plafonnier
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereCuisinePlafonnier))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereCuisinePlafonnier))
                           
                    elif DataDecode[5:7]==LumiereCuisinePlanDeTravail: # Cuisine Plan de travail
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereCuisinePlanDeTravail))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereCuisinePlanDeTravail))

                    elif DataDecode[5:7]==LumiereCouloir: # Couloir
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereCouloir))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereCouloir))
                           
                    elif DataDecode[5:7]==LumiereWC: # WC
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereWC))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereWC))

                    elif DataDecode[5:7]==LumiereSalleDeBainPlafonnier: # Salle de Bain Plafonnier
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereSalleDeBainPlafonnier))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereSalleDeBainPlafonnier))

                    elif DataDecode[5:7]==LumiereSalleDeBainMiroir: # Salle de Bain Miroir
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereSalleDeBainMiroir))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereSalleDeBainMiroir))
                           
                    elif DataDecode[5:7]==LumiereSalon: # Salon
                        if DataDecode[3:4]==Allume:
                            loggit = "UPDATE lumiere SET etat = 'ON' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereSalon))
                        elif DataDecode[3:4]==Eteindre:
                            loggit = "UPDATE lumiere SET etat = 'OFF' WHERE id_lumiere = '%s' "
                            commandeSQL(loggit %(LumiereSalon))
             
                    else:
                        print (Date + " : " + DataDecode + " = Commande Lumiere non prise en compte")
                        loggit = "INSERT INTO commande_inconnue (date_releve, commande) VALUES (%s, %s)"
                        commandeSQL(loggit, (Date, DataDecode))

# Enregistrement des volets ------------------------------------------------------------------------------------------------------------         
                elif DataDecode[0:3] == "*2*":
# Enregistrement des températures ----------------------------------------------------------------------------------------------------
                elif DataDecode[0:4] == "*#4*":
# Enregistrement des consommations par heures -------------------------------------------------------------------------------------
                elif DataDecode[0:12] == "*#18*51*511#":
                    if datetime.now().hour == 0:
                        yesterday = datetime.now() - timedelta(1)
                        Annee = yesterday.year
                        Mois = yesterday.month
                        Jour = yesterday.day
                        Heure = 0
                    else:
                        Annee = datetime.now().year
                        Mois = datetime.now().month
                        Jour = datetime.now().day
                        Heure = datetime.now().hour
                   
                    DataMois = DataDecode.split("#")[2].split("*")
                    DataConso = DataDecode[2:-1].split("#")[2].split("*")
                   
                    heure = int(DataConso[1])
                    conso = int(DataDecode.split("*")[5])
                    jour = int(DataConso[0])
                    mois = int(DataMois[0])
                   
                    data = {}
                    data[heure] = conso

                    if mois == Mois and jour == Jour and Heure == 0: #Si il est minuit passé alors on enregistre la conso d'hier à minuit et le cumul journée
                        print ("Il est minuit")
                        if heure > 23:           
                            loggit = "INSERT INTO consommation (date_releve, timemysql, heure, watt_heure) VALUES (%s, %s, %s, %s)"
                            commandeSQL(loggit, (Date, Timestamp, heure, conso))
                            print ("24 et 25")

                            if heure == 24:
                                print (Date + " : " + DataDecode + " = Heure = 24")
                                #Connexion à la Bdd mysql
                                conn = mysql.connector.connect(**config)
                                cursor = conn.cursor()
                                #Dernier relevé de compteur enregistré
                                query = "SELECT kWh FROM kWh_compteur_EDF"
                                cursor.execute(query)
                               
                                for (kWh) in cursor:
                                    LastkWh = kWh[0]
                                NewkWh = decimal.Decimal(conso) / decimal.Decimal(1000) + LastkWh
                                #Connexion à la Bdd mysql pour saisir le nouveau compteur EDF et sa date d'enregistrement
                                conn = mysql.connector.connect(**config)
                                cursor = conn.cursor()
                                loggit = "UPDATE kWh_compteur_EDF SET kWh = '%s', date_releve = '%s' "
                                cursor.execute(loggit%(NewkWh, Date))
                                conn.commit()
                                cursor.close()
                                conn.close()
                       
                    elif mois == Mois and jour == Jour and Heure != 0: #sinon on regarde la conso de l'heure écoulée
                        print (Date + " : " + DataDecode + "  Heure != 0")
                        if heure == Heure:
                            print (Date + " : " + DataDecode + " Heure = heure")
                            loggit = "INSERT INTO consommation (date_releve, timemysql, heure, watt_heure) VALUES (%s, %s, %s, %s)"
                            commandeSQL(loggit, (Date, Timestamp, heure, conso))
                           
                            #Connexion à la Bdd mysql
                            conn = mysql.connector.connect(**config)
                            cursor = conn.cursor()
                            #Dernier relevé de compteur enregistré
                            query = "SELECT kWh FROM kWh_compteur_EDF"
                            cursor.execute(query)
                           
                            for (kWh) in cursor:
                                LastkWh = kWh[0]
                            NewkWh = decimal.Decimal(conso) / decimal.Decimal(1000) + LastkWh
                            #Connexion à la Bdd mysql pour saisir le nouveau compteur EDF et sa date d'enregistrement
                            conn = mysql.connector.connect(**config)
                            cursor = conn.cursor()
                            loggit = "UPDATE kWh_compteur_EDF SET kWh = '%s', date_releve = '%s' "
                            cursor.execute(loggit%(NewkWh, Date))
                            conn.commit()
                            cursor.close()
                            conn.close()

# Consommations de la prise de courant ??? par heure sur le canal 52 --------------------------------------------------------------
                elif DataDecode[0:12] == "*#18*52*511#":
# Consommations de l'eau chaude par heure sur le canal 53 -------------------------------------------------------------------------
                elif DataDecode[0:11] == "*#18*53*56#":
# Consommations de l'eau froide par heure sur le canal 54 --------------------------------------------------------------------------
                elif DataDecode[0:11] == "*#18*54*56#":
# Consommations du chauffage par heure sur le canal 55 ----------------------------------------------------------------------------
                elif DataDecode[0:11] == "*#18*55*56#":
# Enregistrement de la consommation instantannée ----------------------------------------------------------------------------------
                elif DataDecode[0:12] == "*#18*51*113*":
# Lancement du changement d'heure quand un autre programme change l'heure du webserveur --------------------------------
                elif DataDecode[0:9] == "*#13**#0*":
# Interception d'une demande d'affichage d'heure ------------------------------------------------------------------------------------
                elif DataDecode[0:8] == "*#13**0*":
# Interception d'une demande d'affichage de la date ---------------------------------------------------------------------------------
                elif DataDecode[0:8] == "*#13**1*":
# Interception d'une demande d'affichage de la MAC du webserveur ----------------------------------------------------------------
                elif DataDecode[0:9] == "*#13**12*":
# Interception d'une demande d'affichage du modèle du webserveur ---------------------------------------------------------------
                elif DataDecode[0:9] == "*#13**15*":
# Interception d'une demande d'affichage du firmware du webserveur -------------------------------------------------------------
                elif DataDecode[0:9] == "*#13**16*":
# Interception d'une demande d'affichage de la version du hardware du webserveur ----------------------------------------------
                elif DataDecode[0:9] == "*#13**17*":
# Interception d'une demande de changement de date et heure --------------------------------------------------------------------
                elif DataDecode[0:10] == "*#13**#22*":
# Enregistrement des changements de date et heure --------------------------------------------------------------------------------
                elif DataDecode[0:9] == "*#13**22*":
# Interception d'une demande non documentée --------------------------------------------------------------------------------------
                elif DataDecode[0:10] == "*#13**#27*":
# Enregistrement des autres commandes ---------------------------------------------------------------------------------------------
                else:
    s.close()
except Exception as e:
    logging.exception("\n"+"\n"+'Erreur_Enregist_events : ' + time.strftime("%d/%m/%Y à %H:%M:%S")+"\n" + str(e)+"\n"+"\n")

J'ai retiré toutes les implications qu'entrainent les elif autre que celui lié à la zone de test, pour ne pas dépasser les 20 000 caractères.
Mais celle qui doit absolument être réactive c'est la première, celle liée au lumière.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #29 le: 25 octobre 2020 à 23:35:50 »
la premiere ligne du profiling en python indique

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        3    6.038    2.013    6.038    2.013 {method 'read' of '_io.BufferedReader' objects}

un 'read' est appelé 3 fois (ncalls) et chaque appel prend 2 secondes (percall) ce qui rajoute 6 secondes au temps total... curieux. il faudrait trouver d'ou vient ce "read".
Je ne vois pas trop ou dans ton script a quoi ce read correspond.


Il faudrait le 'output' (les print) de ton script lors que l'execution pour voir ce qui se passe plus en détail.

sinon utiliser pprofile:

- installation: pip install pprofile
- exécution: pprofile  tonscript.py parametres eventuels

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #30 le: 26 octobre 2020 à 22:15:59 »
la premiere ligne du profiling en python indique

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        3    6.038    2.013    6.038    2.013 {method 'read' of '_io.BufferedReader' objects}

un 'read' est appelé 3 fois (ncalls) et chaque appel prend 2 secondes (percall) ce qui rajoute 6 secondes au temps total... curieux. il faudrait trouver d'ou vient ce "read".
Je ne vois pas trop ou dans ton script a quoi ce read correspond.


Il faudrait le 'output' (les print) de ton script lors que l'execution pour voir ce qui se passe plus en détail.

sinon utiliser pprofile:

- installation: pip install pprofile
- exécution: pprofile  tonscript.py parametres eventuels

Je ne peux malheureusement pas installer pprofile, compte tenu que ma connexion internet est coupée (étape 2).
Je testerai dès que possible.

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #31 le: 15 novembre 2020 à 19:07:20 »
la premiere ligne du profiling en python indique

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        3    6.038    2.013    6.038    2.013 {method 'read' of '_io.BufferedReader' objects}

un 'read' est appelé 3 fois (ncalls) et chaque appel prend 2 secondes (percall) ce qui rajoute 6 secondes au temps total... curieux. il faudrait trouver d'ou vient ce "read".
Je ne vois pas trop ou dans ton script a quoi ce read correspond.


Il faudrait le 'output' (les print) de ton script lors que l'execution pour voir ce qui se passe plus en détail.

sinon utiliser pprofile:

- installation: pip install pprofile
- exécution: pprofile  tonscript.py parametres eventuels

Salut kgersen,

J'ai fini par récupérer une connexion internet pour me remettre à tester mon script.
Finalement, j'ai cherché un autre moyen de connexion à mysql et j'ai trouvé PyMySQL.
C'est le jour et la nuit à la place de mysql-connector.
Là où je mettais 37 secondes à récupérer et enregistrer mes consommations électrique de la journée, PyMySQL le fait en moins de 3 secondes.
J'ai encore pas mal de bug Broken pipe que je n'arrive pas à comprendre. Bug qui était déjà présent avec mysql-connector, mais au moins j'ai retrouvé la réactivité du script.

Erreur_Enregist_events : 15/11/2020 à 18:02:07
[Errno 32] Broken pipe

Traceback (most recent call last):
  File "/home/pi/Script_Cron_Domotique/Enregistrement_evenements.py", line 107, in <module>
    print (DateFrance + " : " + DataDecode + " = Retour du Webserveur avant tout if")
BrokenPipeError: [Errno 32] Broken pipe

Tu aurais une idée pour trouver d'où vient le problème, la ligne communiquée pouvant ne pas toujours être la même ?

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #32 le: 15 novembre 2020 à 23:46:53 »
J'ai encore pas mal de bug Broken pipe que je n'arrive pas à comprendre. Bug qui était déjà présent avec mysql-connector, mais au moins j'ai retrouvé la réactivité du script.

Erreur_Enregist_events : 15/11/2020 à 18:02:07
[Errno 32] Broken pipe

Traceback (most recent call last):
  File "/home/pi/Script_Cron_Domotique/Enregistrement_evenements.py", line 107, in <module>
    print (DateFrance + " : " + DataDecode + " = Retour du Webserveur avant tout if")
BrokenPipeError: [Errno 32] Broken pipe

Tu aurais une idée pour trouver d'où vient le problème, la ligne communiquée pouvant ne pas toujours être la même ?

tu lance comment ton script (y'a une redirection > ou un |) ? c'est toujours sur un 'print' l'erreur ? python2 ou python3 ?

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #33 le: 16 novembre 2020 à 08:17:50 »
tu lance comment ton script (y'a une redirection > ou un |) ? c'est toujours sur un 'print' l'erreur ? python2 ou python3 ?

Mon script est lancé par le crontab suivant :
# Lancement du script python d'écoute du web serveur à l'allumage du raspberry :
@reboot sleep 25 && python3 /home/pi/Script_Cron_Domotique/Enregistrement_evenements.py date >> /home/pi/Script_Cron_Domotique/cron_Web_Serveur.log 2>&1

Il plante toutes les heures au moment ou le serveur domotique envoi les informations de la consommation électrique demandée par un autre script python3 lancé par le crontab suivant :
# Plannification de la lecture du relevé de la consommation en Wh par heure sans enregistrement, tout les heures à passée de 3 minutes :
3 * * * * python /home/pi/Script_Cron_Domotique/Conso_par_jour_sans_enregistrement.py date >> /home/pi/Script_Cron_Domotique/cron_conso.log 2>&1

Bizarrement j'ai lancé le même script Enregistrement_evenements.py via la commande sudo python3 Enregistrement_evenements.py en mode terminal (en même temps qu'il était déjà lancé via le crontab, et alors que cette dernière version a planté avec le code erreur broken pip, celui lancé via le terminal n'a pas planté.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Script python lancé en double, pourquoi
« Réponse #34 le: 16 novembre 2020 à 11:08:39 »
C'est probablement du a la redirection et la bufférisassions. il faudrait gérer correctement les erreurs d'I/O mais bon.

Tu peux éventuellement ajouté l'option "-u":

@reboot slee 25 && python3 -u /home/pi/....
aussi évite de mélanger python 2 et 3.Ton deuxième script utilise 'python' , le premier utilise 'python3'.

Darkjeje

  • Abonné Free adsl
  • *
  • Messages: 592
  • Free VDSL2 Issy-les-Moulineaux (92)
Script python lancé en double, pourquoi
« Réponse #35 le: 16 novembre 2020 à 22:47:44 »
C'est probablement du a la redirection et la bufférisassions. il faudrait gérer correctement les erreurs d'I/O mais bon.

Tu peux éventuellement ajouté l'option "-u":

@reboot slee 25 && python3 -u /home/pi/....
aussi évite de mélanger python 2 et 3.Ton deuxième script utilise 'python' , le premier utilise 'python3'.

J'ai rajouté le "-u" et tout mes scripts Python sont lancés avec Python3 dans mon crontab.
Malheureusement j'ai toujours la même anomalie lorsque le serveur envoi les données de consommation.