【问题标题】:Python - 1000-2000 API RequestsPython - 1000-2000 API 请求
【发布时间】:2015-04-26 23:44:05
【问题描述】:

我正在尝试向 API 发出一些 GET 请求(介于 1000 和 2000 之间)。到目前为止,它需要超过 5 分钟,而 MySQL 服务器刚刚关闭了我的连接。

我想在一分钟内完成。应该可以吧?

这是我目前所拥有的:

def get_data(devices):

        for dev in devices: #array containing around 1000 devices
            model = str(dev[0])
            brand = str(dev[1])    
            model = model.replace(" ", "%20")
            brand = brand.replace(" ","%20")

            os = urllib2.urlopen('https://api.com/getData?&brand=' + brand + '&model='+ model).read()
            xmldoc = minidom.parseString(os)

            for element in xmldoc.getElementsByTagName('name'):
                print (element.firstChild.nodeValue)

【问题讨论】:

  • 也许看看多线程。这是一个很好的起点:stackoverflow.com/questions/2846653/…
  • @Ryan 这无济于事 - 是服务器窒息。如果你想提高服务器性能,有很多方法可以做到——从研究缓存开始。如果数据不大(也可以在内存中提供帮助),那么没有理由在每次请求时都向数据库发送查询! (或根本......)
  • 增加mysql连接超时值?当你发现它掉线时重新建立连接?在末尾批量插入而不是在每个结果中插入?
  • 修改服务器,使其每个请求需要多个 ID,每个响应使用多个数据集进行回复。
  • %20 不是构建 url 时唯一应该处理的事情。

标签: python mysql performance api


【解决方案1】:

你代码的瓶颈可能是网络I/O,如果你想更快地做到这一点,你可以尝试使用gevent 库。

我用它来做很多 IP 地址的跟踪路由,它比多线程更快。 Here 是一些帮助您入门的演示代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多