Vlákno názorů k článku
Python 3.11 beta 1 ukazuje podstatné zrychlení od Mintaka - Když nám CPython v základu zrychlí, tak fajn,...

  • Článek je starý, nové názory již nelze přidávat.
  • 8. 6. 2022 14:07

    Mintaka

    Když nám CPython v základu zrychlí, tak fajn, nicméně potřeba "rychlého" Pythonu je IMHO na tom zhruba podobně, jako potřeba lidí jezdit autem 250 km/h.
    Jako, bylo by to pěkné mít možnost se rychleji přesunout z bodu A o bodu B, v realitě ale narazíte na zácpy na silnicích (čekání na data z externích zdrojů). A pokud vás skutečně bude brzdit něco v interpretaci kódu, tak spíš nevhodný návrh aplikace než pomalost Pythonu.

    A pokud patříte mezi to <1% šťastlivců a skutečně děláte něco, kde vás rychlost Pythonu trápí, tak pak si, po diskuzi s profilerem, můžete dát tu práci odskočit si do C nebo třeba Rustu.

    8. 6. 2022, 14:08 editováno autorem komentáře

  • 8. 6. 2022 14:51

    Jakub Štech

    Přesně tak. Ale. V jednom místě je surová rychlost pythonu důležitá, a tou je doba jeho spouštění, hlavně importy. Kdy musí co nejrychleji projet inicializace všeho, než se dostane k užitečné práci.

    Dnes je běžné mít i často volané programy implementované v Pythonu, běžně vídám v kontejnerech různé odesílače telemetrie které se volají "cronem" třeba jednou za 10 sekund. Ušetřit každou minutu půl sekundy CPU času (benchmark níže) může představovat pro server s tisícem instancí měřitelný pokles zátěže/spotřeby.

    $ hyperfine "python3.10 -c \"import requests; print('Hello world')\"" "python3.11 -c \"import requests; print('Hello world')\""
    Benchmark 1: python3.10 -c "import requests; print('Hello world')"
      Time (mean ± σ):     325.4 ms ±  22.7 ms    [User: 297.4 ms, System: 25.3 ms]
      Range (min … max):   295.9 ms … 365.4 ms    10 runs
    
    Benchmark 2: python3.11 -c "import requests; print('Hello world')"
      Time (mean ± σ):     249.3 ms ±  15.7 ms    [User: 216.3 ms, System: 31.1 ms]
      Range (min … max):   227.6 ms … 270.8 ms    12 runs
    
    Summary
      'python3.11 -c "import requests; print('Hello world')"' ran
        1.31 ± 0.12 times faster than 'python3.10 -c "import requests; print('Hello world')"'

    Requests patří k nejpoužívanějším a zároveň nejdražším (co do CPU času v importu) knihovnám, obě verze cpythonu startují okolo 20 ms, to zrychlení je v import requests.

  • 8. 6. 2022 15:12

    Mintaka

    Doba spouštěn interpretu, to chápu, to je jiné kafe. Na kostce Lego Mindstorm EV3 se spouští interpret skoro minutu. Interpret MicroPythonu je na tom výrazně lépe.

    Dá se to řešit třeba tak, že ten interpret už je spuštěný a jen se mu podstrkují úkoly.

  • 8. 6. 2022 15:44

    Jakub Štech

    Však tohle právě ukazuje, že interpret se spouští pořád tak nějak stejně rychle, ale inicializace toho modulu se výrazně zrychlila :-)

    V producer/consumer pipeline taky budete s každým spuštěním tasku parsovat, reimportovat, inicializovat.

    Pro srovnání jen python:

    $ hyperfine "python3.10 -c \"print('Hello world')\"" "python3.11 -c \"print('Hello world')\""
    Benchmark 1: python3.10 -c "print('Hello world')"
      Time (mean ± σ):      18.2 ms ±   6.9 ms    [User: 15.1 ms, System: 3.6 ms]
      Range (min … max):    12.3 ms …  42.5 ms    158 runs
    
    Benchmark 2: python3.11 -c "print('Hello world')"
      Time (mean ± σ):      17.8 ms ±   4.8 ms    [User: 14.2 ms, System: 3.5 ms]
      Range (min … max):    12.3 ms …  40.1 ms    170 runs