python - 如何加速 API 请求?

标签 python api

我构建了以下小程序,用于使用 google 的 place api 获取电话号码,但它非常慢。当我测试 6 个项目时,它需要 4.86 秒到 1.99 秒,我不确定为什么时间会发生重大变化。我对 API 很陌生,所以我什至不确定哪些事情可以/不能加速,哪些事情留给服务 API 的网络服务器,以及我可以自己改变什么。

import requests,json,time
searchTerms = input("input places separated by comma")

start_time = time.time() #timer
searchTerms = searchTerms.split(',')
for i in searchTerms:
    r1 = requests.get('https://maps.googleapis.com/maps/api/place/textsearch/json?query='+ i +'&key=MY_KEY')
    a = r1.json()
    pid = a['results'][0]['place_id']
    r2 = requests.get('https://maps.googleapis.com/maps/api/place/details/json?placeid='+pid+'&key=MY_KEY')
    b = r2.json()
    phone = b['result']['formatted_phone_number']
    name = b['result']['name']
    website = b['result']['website']
    print(phone+' '+name+' '+website)

print("--- %s seconds ---" % (time.time() - start_time))

最佳答案

您可能希望并行发送请求。 Python 提供 multiprocessing适合这样的任务的模块。

示例代码:

from multiprocessing import Pool

def get_data(i):
    r1 = requests.get('https://maps.googleapis.com/maps/api/place/textsearch/json?query='+ i +'&key=MY_KEY')
    a = r1.json()
    pid = a['results'][0]['place_id']
    r2 = requests.get('https://maps.googleapis.com/maps/api/place/details/json?placeid='+pid+'&key=MY_KEY')
    b = r2.json()
    phone = b['result']['formatted_phone_number']
    name = b['result']['name']
    website = b['result']['website']
    return ' '.join((phone, name, website))

if __name__ == '__main__':
    terms = input("input places separated by comma").split(",")
    with Pool(5) as p:
        print(p.map(get_data, terms))

关于python - 如何加速 API 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34512646/

相关文章:

python - 使用 PyOpenGL 可视化 3D NumPy 数组

python - 如何在 order_by 之后获取结果在列表中的位置?

python - Python中的 `board[x, y]`和 `board[x][y]`有区别吗?

python - django 中的 "python manage.py migrate "到底做什么?

python - 如何在不重新启动 Pylons 的情况下重新加载修改后的文件?

ios - 等待 swift for 循环网络请求执行完毕(原生不使用任何框架)

ruby-on-rails - 无需身份验证即可将安全的 POST 数据发送到 RESTful API

java - 如何用 Java 编写 Facebook 应用程序?

node.js - 在中间件 api 中组合 GET 和 POST 方法的最佳方法是什么?

api - 在 Twitter Streaming API 中过滤数据