Python - как ускорить расчет расстояний между городами

В моей базе данных 55249 городов. Каждый из них имеет значения широты и долготы. Для каждого города я хочу рассчитать расстояния до любого другого города и сохранить те, которые не превышают 30 км. Вот мой алгоритм:

# distance function
from math import sin, cos, sqrt, atan2, radians

def distance(obj1, obj2):
    lat1 = radians(obj1.latitude)
    lon1 = radians(obj1.longitude)
    lat2 = radians(obj2.latitude)
    lon2 = radians(obj2.longitude)
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = (sin(dlat/2))**2 + cos(lat1) * cos(lat2) * (sin(dlon/2))**2
    c = 2 * atan2(sqrt(a), sqrt(1-a))
    return round(6373.0 * c, 2)

def distances():
    cities = City.objects.all()  # I am using Django ORM
    for city in cities:
        closest = list()
        for tested_city in cities:
            distance = distance(city, tested_city)
            if distance 

Ответы на вопрос(5)

Ваш ответ на вопрос