Task 8: multiprocessing
This commit is contained in:
parent
ca8ed5394c
commit
76482aca50
16
main.py
16
main.py
@ -105,10 +105,18 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
|
|
||||||
# Was ist passiert?
|
# Was ist passiert?
|
||||||
# * eigenes Modul 'utils' mit Funktion 'store_to_disk()', welche für die Speicherung der Daten zuständig ist.
|
# * Wir haben einen ersten Test im Modul 'tests' geschrieben
|
||||||
|
# * Der Kern von fetch_overpass() ist ein HTTP-Request — ohne Mocks lässt sich die Funktion selbst kaum sinnvoll testen,
|
||||||
|
# weil jeder Test auf die echte API angewiesen wäre (langsam, flaky, Netzwerkabhängig).
|
||||||
|
# -> deshalb war nun der erste Test (zum eigentlich weniger wichtigen) 'store_to_disk' ...!
|
||||||
|
|
||||||
|
|
||||||
# TASK:
|
# TASK:
|
||||||
|
|
||||||
# * Bis jetzt haben wir nur Code geschrieben, aber keine Tests... Das holen wir jetzt nach!
|
# * Wir arbeiten nun alle 4,9, 16 Sequenzen hintereinander seriell ab. Wir könnten versuchen den ganzen Prozess zu
|
||||||
# -> Überlegt: Was für Tests könnten geschrieben werden? Was macht Sinn? Schreibt 1-2 euerer Tests. Erstellt
|
# beschleunigen und ihn parallel auszuführen...
|
||||||
# dazu wie gewöhnlich den Order tests und speichert darin eure Tests (mit pytest)
|
# * Es gibt je nach Problem verschiedene Möglichkeiten unseren Code zu parallelisieren -> beide haben Vor- und Nachteile!
|
||||||
|
# - Multithreating
|
||||||
|
# - Multiprocessing
|
||||||
|
# -> wir beginnen mit dem Multiprocessing-Ansatz (multiprocessing). Dazu bauen wir wieder ein neues model namens 'worker'
|
||||||
|
# wo wir unseren Code für die Parallelisierung ablegen.
|
||||||
BIN
tests/__pycache__/test_overpass.cpython-313-pytest-9.0.2.pyc
Normal file
BIN
tests/__pycache__/test_overpass.cpython-313-pytest-9.0.2.pyc
Normal file
Binary file not shown.
33
tests/test_overpass.py
Normal file
33
tests/test_overpass.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import pytest
|
||||||
|
from utils import store_to_disk
|
||||||
|
|
||||||
|
# tmp_path ist ein pytest-Fixture — d.h. pytest stellt ihn automatisch bereit, ohne dass man ihn importieren muss.
|
||||||
|
# pytest startet
|
||||||
|
# → sieht Parameter "tmp_path" in der Funktionssignatur
|
||||||
|
# → erstellt automatisch ein temporäres Verzeichnis (z.B. /tmp/pytest-123/test_store_0/)
|
||||||
|
# → übergibt es als Path-Objekt an die Testfunktion
|
||||||
|
# → löscht es nach dem Test wieder
|
||||||
|
|
||||||
|
def test_store_to_disk_creates_file(tmp_path):
|
||||||
|
"""Stellt sicher, dass store_to_disk eine lesbare JSON-Datei erstellt."""
|
||||||
|
import json
|
||||||
|
|
||||||
|
elements = [
|
||||||
|
{"type": "node", "id": 1, "lat": 46.1835291, "lon": 6.8346732, "tags": {"name": "Jakobshorn"}},
|
||||||
|
{"type": "way", "id": 2, "lat": 46.1772269, "lon": 6.8402226, "tags": {"name": "Parsenn"}},
|
||||||
|
]
|
||||||
|
|
||||||
|
saved_path = store_to_disk(
|
||||||
|
results=elements,
|
||||||
|
poi_type="bergbahn",
|
||||||
|
output_dir=tmp_path,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert saved_path.exists()
|
||||||
|
assert saved_path.name == "bergbahn_results.json"
|
||||||
|
|
||||||
|
with saved_path.open(encoding="utf-8") as f:
|
||||||
|
loaded = json.load(f)
|
||||||
|
|
||||||
|
assert loaded == elements # Inhalt identisch
|
||||||
|
assert len(loaded) == 2
|
||||||
Loading…
x
Reference in New Issue
Block a user