Почему мой цикл геопы всегда заканчивается в Killed: 9?

У меня есть список адресов, и я просто получаю сообщение об ошибке Kill 9, когда пытаюсь добавить координаты.

Время истекло? Я добавил время сна, чтобы предотвратить это.

Я получаю эту ошибку Killed: 9

def do_geocode(Nominatim, address):
    time.sleep(3)
    try:
        return Nominatim.geocode(address)
    except GeocoderTimedOut:
        return do_geocode(Nominatim,address)

def addCoordinates(businessList):
    businessList[0] = ["pageNum","entryNum","name","address","tagOne","tagTwo","tagThree","geoAddress","appendedLocation","latitude","longitude","key"]

    geolocator = Nominatim(timeout=None)
    z = 0
    i=1
    while i < len(businessList):
        longitude = ""
        latitude = ""
        geoLocation = ""
        geoAddress = ""
        entry = []

        appendedLocation = (businessList[i][3] + ", San Francisco")

        geoLocation = do_geocode(geolocator, appendedLocation)

        if geoLocation is not None:
            geoAddress = geoLocation.address
            latitude = geoLocation.latitude
            longitude = geoLocation.longitude

            entry = [geoAddress, appendedLocation, str(latitude), str(longitude)]
            j=0
            while j < len(entry):
                businessList[i] += [entry[j]]
                j+=1
            print("coordinates added")
            z +=1
            print(z)

        i+=1

1 ответ

Killed: 9 Возможно, это означает, что ваш скрипт на Python был завершен чем-то в вашей ОС (возможно, OOM killer?). Убедитесь, что ваш скрипт не занимает всю доступную память машины.

Специально для геопсии я бы посоветовал взглянуть на класс RateLimiter. Также обратите внимание, что вам нужно указать свой уникальный пользовательский агент при использовании Nominatim (что объясняется в документации по классу Nominatim). Вы получите что-то вроде этого:

from geopy.extra.rate_limiter import RateLimiter


def addCoordinates(businessList):
    businessList[0] = ["pageNum","entryNum","name","address","tagOne","tagTwo","tagThree","geoAddress","appendedLocation","latitude","longitude","key"]

    geolocator = Nominatim(user_agent="specify_your_app_name_here", timeout=20)
    geocode = RateLimiter(
        geolocator.geocode, 
        min_delay_seconds=3.0,
        error_wait_seconds=3.0,
        swallow_exceptions=False, 
        max_retries=10,
    )
    z = 0
    i=1
    while i < len(businessList):
        longitude = ""
        latitude = ""
        geoLocation = ""
        geoAddress = ""
        entry = []

        appendedLocation = (businessList[i][3] + ", San Francisco")

        geoLocation = geocode(appendedLocation)

        if geoLocation is not None:
            geoAddress = geoLocation.address
            latitude = geoLocation.latitude
            longitude = geoLocation.longitude

            entry = [geoAddress, appendedLocation, str(latitude), str(longitude)]
            j=0
            while j < len(entry):
                businessList[i] += [entry[j]]
                j+=1
            print("coordinates added")
            z +=1
            print(z)

        i+=1
Другие вопросы по тегам