Added threading

This commit is contained in:
2025-06-07 15:37:24 -07:00
parent 61727c1254
commit 7f382ba77f

View File

@@ -10,6 +10,8 @@ import tempfile
import numpy as np
import io
from PIL import Image
import threading
import concurrent.futures
import cartopy.crs as ccrs
from cartopy.io.img_tiles import OSM
@@ -96,16 +98,6 @@ def get_radar_from_aws(aws_object):
radar : Py-ART Radar Object
Radar closest to the queried datetime
"""
#find the closest available radar to your datetime
#closest_datetime = _nearestDate(datetimes, datetime_t)
#index = datetimes.index(closest_datetime)
#localfile = tempfile.NamedTemporaryFile()
#keys[index].Object().download_file(localfile.name)
#aws_object.download_file(localfile.name)
#radar = pyart.io.read(localfile.name)
filename = aws_object.key.replace('/', '_')
if not os.path.isfile(f'cache/rawradar/{filename}'):
printdebug('Cache Miss')
@@ -142,10 +134,11 @@ def generate_radar_image(radar_data, tiler, mercator):
radar_data.fields['reflectivity']['data'][:, -10:] = np.ma.masked
gatefilter = pyart.filters.GateFilter(radar_data)
gatefilter.exclude_transition()
gatefilter.exclude_masked("reflectivity")
gatefilter.exclude_below('reflectivity', 16)
# gatefilter = pyart.filters.GateFilter(radar_data)
# gatefilter.exclude_transition()
# gatefilter.exclude_masked("reflectivity")
# gatefilter.exclude_below('reflectivity', 16)
gatefilter = pyart.filters.moment_based_gate_filter(radar_data)
printdebug('Despeckling')
despeckle_gatefilter = pyart.correct.despeckle_field(radar_data, 'reflectivity', gatefilter=gatefilter, size=20)
@@ -171,6 +164,20 @@ def generate_radar_image(radar_data, tiler, mercator):
return fig
def _thread_generate_radar_image(radar_data, dataName, tiler, mercator, index, lock):
if not os.path.isfile(f'cache/radarimages/{dataName}.png'):
fig = generate_radar_image(radar_data, tiler, mercator)
frame = convert_fig_to_img(fig)
frame.save(f'cache/radarimages/{dataName}.png')
lock.acquire()
secondary_frames[index] = frame
lock.release()
else:
frame = Image.open(f'cache/radarimages/{dataName}.png')
lock.acquire()
secondary_frames[index] = frame
lock.release()
fmt = '%Y%m%d_%H%M%S'
currentDatetime = datetime.now(timezone.utc)
num_frames = 20
@@ -192,13 +199,18 @@ else:
firstFrame = Image.open(f'cache/radarimages/{radarKeys[0]}.png')
i = 0
lock = threading.Lock()
threadPool = concurrent.futures.ThreadPoolExecutor(max_workers=4)
for i in range(num_frames - 1):
if not os.path.isfile(f'cache/radarimages/{radarKeys[i + 1]}.png'):
fig = generate_radar_image(radar[radarKeys[i + 1]], tiler, mercator)
secondary_frames[i] = convert_fig_to_img(fig)
secondary_frames[i].save(f'cache/radarimages/{radarKeys[i + 1]}.png')
else:
secondary_frames[i] = Image.open(f'cache/radarimages/{radarKeys[i + 1]}.png')
# if not os.path.isfile(f'cache/radarimages/{radarKeys[i + 1]}.png'):
# fig = generate_radar_image(radar[radarKeys[i + 1]], tiler, mercator)
# secondary_frames[i] = convert_fig_to_img(fig)
# secondary_frames[i].save(f'cache/radarimages/{radarKeys[i + 1]}.png')
# else:
# secondary_frames[i] = Image.open(f'cache/radarimages/{radarKeys[i + 1]}.png')
threadPool.submit(_thread_generate_radar_image, radar[radarKeys[i + 1]], radarKeys[i + 1], tiler, mercator, i, lock)
threadPool.shutdown(wait=True)
datetimeString = datetime.strftime(currentDatetime, fmt)