...
For this reason we suggest to limit to a maximum of 10 parallel requests.
.
| Code Block | ||||
|---|---|---|---|---|
|
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
import cdsapi
from concurrent.futures import ThreadPoolExecutor, as_completed
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings("ignore")
LEADTIMES = ["%d" % (l) for l in range(24, 1128, 24)]
YEARS = ["%d" % (y) for y in range(1999, 2019)]
def get_dates(start=[2019, 1, 1], end=[2019, 12, 31]):
start, end = datetime(*start), datetime(*end)
days = [start + timedelta(days=i) for i in range((end - start).days + 1)]
dates = [
list(map(str.lower, d.strftime("%B-%d").split("-")))
for d in days
if d.weekday() in [0, 3]
]
return dates
DATES = get_dates()
def retrieve(client, request, date):
month = date[0]
day = date[1]
print(f"requesting month: {month}, day: {day} /n")
request.update({"hmonth": month, "hday": day})
client.retrieve(
"cems-glofas-reforecast", request, f"glofas_reforecast_{month}_{day}.grib"
)
return f"retrieved month: {month}, day: {day}"
def main(request):
"concurrent request using 10 threads"
client = cdsapi.Client()
with ThreadPoolExecutor(max_workers=10) as executor:
futures = [
executor.submit(retrieve, client, request.copy(), date) for date in DATES
]
for f in as_completed(futures):
try:
print(f.result())
except:
print("could not retrieve")
if __name__ == "__main__":
request = {
"system_version": "version_2_2",
"variable": "river_discharge_in_the_last_24_hours",
"format": "grib",
"hydrological_model": "htessel_lisflood",
"product_type": "control_reforecast",
"hyear": YEARS,
"hmonth": "",
"hday": "",
"leadtime_hour": LEADTIMES,
}
main(request)
|
...