From 81f1fd0ce22cac1d771f2b4393466291c6ca0962 Mon Sep 17 00:00:00 2001 From: Adam Jurkiewicz Pythonista Local Date: Tue, 16 Dec 2025 15:00:45 +0100 Subject: [PATCH] skrypt --- dzien_02/test_wydajn.py | 143 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 dzien_02/test_wydajn.py diff --git a/dzien_02/test_wydajn.py b/dzien_02/test_wydajn.py new file mode 100644 index 0000000..a5322c4 --- /dev/null +++ b/dzien_02/test_wydajn.py @@ -0,0 +1,143 @@ +# program test_wydajnosci.py +# Test wydajności Pythona w systemach Windows i Linux + + +# Wykorzystywane moduły +import sys + +try: + import matplotlib.pyplot as plt +except: + print("""" + Pamiętaj - skrypt najlepiej działa w virtual env, więc: + python -m venv venv_dir + ...""") + if sys.platform == "linux": + print(""" + Aktywacja venv: + source venv_dir/bin/activate + I potem instalacja biblioteki + pip install matplotlib + """) + elif sys.platform == "win32": + print(""" + Aktywacja venv: + venv_dir\\Scripts\\activate.bat + I potem instalacja bibliotek + pip install matplotlib msvc-runtime + """) + else: + print(f"nie wiem, co zrobić w systemie {sys.platform}") + print("jeśli wiesz, możesz wysłać info do mnie") + print("Adam") + sys.exit(2) + +# Reszta to standardowe moduły +import os +import pickle +import json +from random import random, randint, seed +from datetime import datetime +from math import sin, cos + +# Funkcje pomocnicze +def zapis_danych(dane, nazwa_pliku="plik_danych.dat"): + with open(nazwa_pliku, "wb") as p: + pickle.dump(dane, p) + + +def odczyt_danych_testowych(plik="plik_danych.dat"): + if not os.path.isfile(plik): + return None + + with open(plik, "rb") as p: + dane = pickle.load(p) + return dane + + +def oblicz(lista, fn_funkcja): + out = [] + for x in lista: + wart = eval(fn_funkcja) + out.append(wart) + return out + + +def json_zapis(dane, nazwa_pliku="plik_danych.json"): + with open(nazwa_pliku, "w") as outfile_e: + json.dump(dane, outfile_e) + + +def zapis_wykresu( + dane_x, dane_y, nazwa_pliku="wykres.png" +): + plt.figure(figsize=(40, 20), dpi=30) + plt.scatter(dane_x, dane_y) + plt.xlabel("dane_x") + plt.ylabel("dane_y") + plt.title(nazwa_pliku) + plt.grid() + plt.tight_layout() + plt.savefig(nazwa_pliku) + plt.close("all") + + +# Ustawienie stałego ziarna dla generatora liczb pseudolosowych tak, aby liczby zwracane przez +# generator były takie same przy kolejnych uruchomieniach testów. +seed(84376529347523) +start_time = datetime.now() + +# Start - od tego momentu liczymy +wyniki = { + "Aplikacja": "Program testowy", + "Autor": "Adam Jurkiewicz", + "sys.version": "", + "sys.version_info": "", + "os.uname": "", + "Start": str(start_time), + "Stop": None, + "Delta_time": None, + "Czasy co 1000 enumeracji": {}, +} + +wyniki[ + "sys.version" +] = f" {sys.platform} -> {sys.version} | hexversion {sys.hexversion} | api {sys.api_version}" +wyniki["sys.version_info"] = str(sys.version_info) +if sys.platform == "linux": + wyniki["os.uname"] = str(os.uname()) + +print("Start testu:") +for w in wyniki: + print(f"{w}: {wyniki[w]}") +print("-----------------") +# 200 punktów podstawowych +dane_x = [x for x in range(-100, 100)] +zapis_danych(dane_x, "dane_wejsciowe.dat") + + +print(f"Startuję obliczanie danych: {datetime.now()}") +for i in range(0, 10003): + # Odczyt danych podstawowych + dane_x = odczyt_danych_testowych("dane_wejsciowe.dat") + if i % 1000 == 0: + time_now = datetime.now() - start_time + wyniki["Czasy co 1000 enumeracji"][i] = str(time_now) + print(f"Obliczam 1000: {i//1000} -> {datetime.now()}") + + if i % 2 == 0: + fun = str(f"sin({randint(1,10)}*x*x+{random()*i}*x-{i**randint(1,4)})") + dane_y = oblicz(dane_x, fun) + else: + fun = str(f"cos({randint(1,i)}*x*x*(-1)+{randint(1,i)}*x+{i})") + dane_y = oblicz(dane_x, fun) + + zapis_danych(dane_y, f"dane_wejsciowe{i}.dat") + zapis_wykresu(dane_x, dane_y, f"wykres{i}.png") + + +stop_time = datetime.now() +wyniki["Stop"] = str(stop_time) +wyniki["Delta_time"] = str(stop_time - start_time) +json_zapis(wyniki) +print(f'Obliczony czas wykonania: {str(stop_time - start_time)}') \ No newline at end of file