【问题标题】:Python, geopy kill time limitPython,geopy杀死时间限制
【发布时间】:2017-08-17 13:51:16
【问题描述】:

我从一个文件中读取了更多的千坐标,因为我想获得相关的国家。我试图杀死时间限制,但它还没有起作用,它在 150-160 坐标后停止。我可以处理吗?

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys


with open('alagridsor.txt') as f:
    lines = f.read().splitlines()    


for sor in range(1, 9271):
    print(sor) 

    koor = lines[sor]

    from geopy.geocoders import Nominatim
    from geopy.exc import GeocoderTimedOut

    geolocator = Nominatim()
    location = geolocator.reverse(koor, timeout=None)
    cim = location.raw['address']['country']

    print(cim)

    f = open('out.txt', 'a')
    f.write(cim.encode('utf8'))
    f.write("\n")

【问题讨论】:

    标签: python time geopy


    【解决方案1】:

    问题

    1. 使用 f.read() 并省略 size 将导致文件的全部内容被读取并返回。如果文件是机器内存的两倍,您将遇到问题。
    2. 总是在 for 循环中打开输出文件非常昂贵。

    可能的解决方案

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import time
    from geopy.geocoders import Nominatim
    
    geolocator = Nominatim(timeout=None)
    fobj_out = open('out.txt', 'a')
    with open('alagridsor.txt') as fobj_in:
        for koor in fobj_in:
            location = geolocator.reverse(koor.rstrip())
            cim = location.raw['address']['country']
            fobj_out.write(cim.encode('utf8'))
            fobj_out.write("\n")
            time.sleep(0.5)     # delay 5 milli-seconds between each request
    fobj_out.close()
    

    【讨论】:

    • 现在可能快了一点,但问题依旧;我已经用完了 geopy 时间限制。
    • 1) 在实例化类 Nominatim 时添加 timeout=None 例如geolocator = Nomaination(timeout=None)
    • (1) 在实例化类 Nominatim 时添加 timeout=None 例如geolocator = Nomaination(timeout=None) (2) 删除行 'koor.rstrip() (3) 删除 for 循环中的 timeout=None 例如位置 = goelocator.reverse(koor.rstrip())。请参阅“可能的解决方案”中的更新代码。我刚刚使用来自 MaxMind 的免费世界城市数据库“worldcitiespop.txt”测试了这些更改。处理完 1286 行坐标后,遇到错误“geopy.exc.GeocoderServiceError: HTTP Error 429: Too Many Requests”。
    • 是的,我成功处理了时间限制问题,然后得到了同样的“请求过多”错误......也许你有解决方案?
    • 在每个请求之间添加延迟,例如time.sleep(0.1) # 延迟 100 毫秒。如我更新的解决方案所示,在 write 语句之后插入延迟。您还将添加一个导入语句“导入时间”。
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 2020-02-22
    • 2021-01-05
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多