Итак, у меня есть Django промежуточное ПО, вызывающее задачу Celery. Эта задача запрашивает базу данных GeoIP2 для определения местоположения данного IP-адреса и выполнения некоторой дополнительной обработки. В упрощенном виде задача сельдерея выглядит следующим образом:
@shared_task(bind=True)
def dump_json_logs(self, data):
g = GeoIP2()
location = g.city(data["ip_address"])
# some other code...
Дело в том, что эту задачу сельдерея можно вызывать тысячи раз в секунду, что приведет к инициализации клиента g = GeoIP2()
каждый раз задача выполнена. Можно ли переместить этот оператор за пределы функции, чтобы клиент инициализировался только один раз, а затем передавался каждой задаче? Куда мне его переместить в этом случае?