python - 使用 Python API 提高 MaxMind IP 查找速度

标签 python performance python-2.7 maxmind

我正在构建一个脚本来处理 Web 服务器日志,并尝试将 MaxMinds 的 IP 数据集 ( http://dev.maxmind.com/geoip/legacy/geolite/ ) 合并到脚本中,以便获取点击来自的国家/地区。

目前,当我只提取我想要的信息时,我的脚本工作正常,但是当我尝试添加 IP 查找时,它的速度会减慢很多,大约 1800%。所以,我很好奇这是否与我的代码有关,或者是否有办法可以加快速度。

例如,当我运行以下提取日期和 IP 地址的代码时,本次实验大约花费了 6.5 秒。

extractedData = []

for log in logList:
    ip = log[-1]
    date = log[0]
    dateIP = [date, ip]
    extractedData.append(dateIP)

当我添加 pyGeoIP 并尝试合并国家/地区代码时,速度会变慢。以下代码运行需要 2 分钟 7 秒。

extractedData = []

gi = pygeoip.GeoIP('/path/to/GeoIP.dat') 

for log in logList:
    ip = log[-1]
    country = gi.country_name_by_addr(ip)
    date = log[0]
    dateCountry = [date, country]
    extractedData.append(dateCountry)

那么,有没有办法加快速度,因为这种查找会减慢处理速度。

谢谢!

最佳答案

由于您正在进行许多查询,因此应该将数据库加载到内存中。就目前情况而言,您不断地从磁盘读取数据,速度非常慢。

交换此行:

gi = pygeoip.GeoIP('/path/to/GeoIP.dat') 

对此:

gi = pygeoip.GeoIP('/path/to/GeoIP.dat', pygeoip.MEMORY_CACHE) 

关于python - 使用 Python API 提高 MaxMind IP 查找速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557921/

相关文章:

python - 如何在函数中定义参数。

Python重新查找所有匹配的重复模式

python - 使用 matplotlib 绘制 RGB 值

java - 安卓并行(simultaneous)图片下载

java - sql distinct什么时候比java编程快 'distinct'

Python - 所有循环中的 `break`

python - 将数组中的空格替换为 0 (Python)

python - 删除包含 2 个相同元素的 Python 列表项

javascript - CSS Sprite 性能

Python 导入错误 : No module name parse