Added threading
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user