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 numpy as np
import io import io
from PIL import Image from PIL import Image
import threading
import concurrent.futures
import cartopy.crs as ccrs import cartopy.crs as ccrs
from cartopy.io.img_tiles import OSM from cartopy.io.img_tiles import OSM
@@ -96,16 +98,6 @@ def get_radar_from_aws(aws_object):
radar : Py-ART Radar Object radar : Py-ART Radar Object
Radar closest to the queried datetime 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('/', '_') filename = aws_object.key.replace('/', '_')
if not os.path.isfile(f'cache/rawradar/{filename}'): if not os.path.isfile(f'cache/rawradar/{filename}'):
printdebug('Cache Miss') printdebug('Cache Miss')
@@ -142,10 +134,11 @@ def generate_radar_image(radar_data, tiler, mercator):
radar_data.fields['reflectivity']['data'][:, -10:] = np.ma.masked radar_data.fields['reflectivity']['data'][:, -10:] = np.ma.masked
gatefilter = pyart.filters.GateFilter(radar_data) # gatefilter = pyart.filters.GateFilter(radar_data)
gatefilter.exclude_transition() # gatefilter.exclude_transition()
gatefilter.exclude_masked("reflectivity") # gatefilter.exclude_masked("reflectivity")
gatefilter.exclude_below('reflectivity', 16) # gatefilter.exclude_below('reflectivity', 16)
gatefilter = pyart.filters.moment_based_gate_filter(radar_data)
printdebug('Despeckling') printdebug('Despeckling')
despeckle_gatefilter = pyart.correct.despeckle_field(radar_data, 'reflectivity', gatefilter=gatefilter, size=20) 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 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' fmt = '%Y%m%d_%H%M%S'
currentDatetime = datetime.now(timezone.utc) currentDatetime = datetime.now(timezone.utc)
num_frames = 20 num_frames = 20
@@ -192,13 +199,18 @@ else:
firstFrame = Image.open(f'cache/radarimages/{radarKeys[0]}.png') firstFrame = Image.open(f'cache/radarimages/{radarKeys[0]}.png')
i = 0 i = 0
lock = threading.Lock()
threadPool = concurrent.futures.ThreadPoolExecutor(max_workers=4)
for i in range(num_frames - 1): for i in range(num_frames - 1):
if not os.path.isfile(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) # fig = generate_radar_image(radar[radarKeys[i + 1]], tiler, mercator)
secondary_frames[i] = convert_fig_to_img(fig) # secondary_frames[i] = convert_fig_to_img(fig)
secondary_frames[i].save(f'cache/radarimages/{radarKeys[i + 1]}.png') # secondary_frames[i].save(f'cache/radarimages/{radarKeys[i + 1]}.png')
else: # else:
secondary_frames[i] = Image.open(f'cache/radarimages/{radarKeys[i + 1]}.png') # 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) datetimeString = datetime.strftime(currentDatetime, fmt)