OSM: create_task GC-sicher — Task-Referenz in _bg_tasks speichern
asyncio.create_task ohne gespeicherte Referenz wird vom Garbage Collector sofort gelöscht bevor der Task läuft (dokumentiertes Python-Verhalten). Fix: _bg_tasks-Set hält Referenz bis done_callback sie wieder entfernt.
This commit is contained in:
parent
ddff1d3571
commit
eaf7884a1f
1 changed files with 7 additions and 2 deletions
|
|
@ -30,6 +30,9 @@ _overpass_last_req = 0.0
|
||||||
_OVERPASS_MIN_DELAY = 2.0 # Sekunden zwischen Anfragen
|
_OVERPASS_MIN_DELAY = 2.0 # Sekunden zwischen Anfragen
|
||||||
_OVERPASS_UA = 'BanYaro/1.0 (https://banyaro.app; dog-walking PWA; contact: mail@motocamp.de)'
|
_OVERPASS_UA = 'BanYaro/1.0 (https://banyaro.app; dog-walking PWA; contact: mail@motocamp.de)'
|
||||||
|
|
||||||
|
# Referenzen auf laufende Hintergrund-Tasks — verhindert GC vor Abschluss
|
||||||
|
_bg_tasks: set = set()
|
||||||
|
|
||||||
OSM_QUERIES = {
|
OSM_QUERIES = {
|
||||||
'waste_basket': '[out:json][timeout:20];node["amenity"="waste_basket"]({bbox});out;',
|
'waste_basket': '[out:json][timeout:20];node["amenity"="waste_basket"]({bbox});out;',
|
||||||
'dog_park': '[out:json][timeout:25];(way["leisure"="dog_park"]({bbox});node["leisure"="dog_park"]({bbox});way["leisure"="park"]["dog"="yes"]({bbox});node["leisure"="park"]["dog"="yes"]({bbox}););out center;',
|
'dog_park': '[out:json][timeout:25];(way["leisure"="dog_park"]({bbox});node["leisure"="dog_park"]({bbox});way["leisure"="park"]["dog"="yes"]({bbox});node["leisure"="park"]["dog"="yes"]({bbox}););out center;',
|
||||||
|
|
@ -177,11 +180,13 @@ async def get_pois(
|
||||||
stale = _stale_tiles(type, tiles)
|
stale = _stale_tiles(type, tiles)
|
||||||
|
|
||||||
if stale and not fast:
|
if stale and not fast:
|
||||||
# Direkt in den Event-Loop einplanen — Antwort kommt sofort zurück
|
# Hintergrund-Task mit gespeicherter Referenz (GC-sicher)
|
||||||
async def _bg_fetch(poi_type, stale_tiles):
|
async def _bg_fetch(poi_type, stale_tiles):
|
||||||
for (x, y) in stale_tiles:
|
for (x, y) in stale_tiles:
|
||||||
await _fetch_and_store_tile(poi_type, x, y)
|
await _fetch_and_store_tile(poi_type, x, y)
|
||||||
asyncio.create_task(_bg_fetch(type, stale))
|
task = asyncio.create_task(_bg_fetch(type, stale))
|
||||||
|
_bg_tasks.add(task)
|
||||||
|
task.add_done_callback(_bg_tasks.discard)
|
||||||
|
|
||||||
with db() as conn:
|
with db() as conn:
|
||||||
reported = {
|
reported = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue