How to avoid the GeocoderTimedOut('Service timed out')
error in GeoPy using the OSM Nominatim geocoder? I am not interested in using an exception and skip some entries. I already use a time delay of 1.1 seconds in my script using time.sleep(1.1)
. Total database is 10,000 entries.
-
Eventually I used the script with a 1 second delay. It took a while but the results are good.– RutgerHDec 15, 2015 at 23:41
2 Answers
You could make a recursive function. Just typing Python-esque pseudo-code:
from geopy.exc import GeocoderTimedOut
def do_geocode(address, attempt=1, max_attempts=5):
try:
return geopy.geocode(address)
except GeocoderTimedOut:
if attempt <= max_attempts:
return do_geocode(address, attempt=attempt+1)
raise
Documentation for geopy.exc.GeocoderTimedOut
.
This will keep retrying the do_geocode
function until it manages to return without a Timeout exception being raised. You might want to limit the number of attempts, or also set a waiting period after a failed attempt. You might also want to think about why a timeout is occurring. Geopy allows you to set the length of time to wait before raising a timeout error, for any of the geocoding methods, with the timeout
keyword argument. The documentation says that "some services are consistently slow", and recommends that this be increased.
-
thanks. this was indeed part of the solution. Make sure to import: from geopy.exc import GeocoderTimedOut– RutgerHMar 11, 2016 at 15:19
-
Hi, this did not work for me, I'm getting:
HTTPSConnectionPool(host='nominatim.openstreetmap.org', port=443): Max retries exceeded with url: /reverse?lat=32.782023&lon=35.478867&format=json&accept-language=en&addressdetails=1 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000001F7AA876240>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it',))
Sep 1, 2020 at 6:50 -
@user88484 You may have exceeded their rate limits. operations.osmfoundation.org/policies/nominatim Maximum of one request per second. Sep 1, 2020 at 22:49
Pass None
to disable timeout.
location = geolocator.geocode(county, timeout=None)