diff --git a/testfile cartopy.py b/testfile cartopy.py index 4220e5a..eaaa1b1 100644 --- a/testfile cartopy.py +++ b/testfile cartopy.py @@ -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)