Как говорит Михаил в своем ответе, очередь заданий, такая как Celery, безусловно, хороший путь.
Если по какой-то причине вы не хотите сдавать хранениеIP для отдельной задачи, потому что вы не можете быть уверены, что асинхронная задача была выполнена вовремя, вы могли бы по крайней мере ускорить сохранение этой информации, сохранив ее в быстром хранилище значений ключей или NoSQL DB.
Redis отлично подойдет.Добавьте вызов в save()
вашей модели, который помещает значение IP в Redis, с ключом, который является уникальным идентификатором для экземпляра модели с именем save()
, а затем добавьте метод (или метод с декорированием свойств), который называетсяstored_ip
или что-то еще, что знает, как получить IP-адрес от Redis, когда вам нужно отправить его своему гео-партнеру.Когда гео-штука готова, удалите ключ из Redis, чтобы Redis не исчерпал память.
Сохранение IP-адреса таким образом должно быть молниеносным, без особых изменений в вашем текущем коде.