在Celery任务中使用GeoIP进行地理定位的正确方法

问题描述 投票:0回答:1

所以,我有一个调用Celery任务的Django中间件。此任务查询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()客户端。我可以将此语句移到函数外部,以便客户端仅初始化一次,然后传递给每个任务吗?在这种情况下,应将其移动到哪里?

python django celery geoip
1个回答
0
投票

您可以将其移至方法范围之外,并在方法内部将其用作全局变量。

g = GeoIP2()

@shared_task(bind=True)
def dump_json_logs(self, data):

    global g

    location = g.city(data["ip_address"])
© www.soinside.com 2019 - 2024. All rights reserved.