我已经构建了以下小程序,用于使用Google的place
api获取电话号码,但是速度很慢。当我测试6个项目时,它花费的时间从4.86s到1.99s,我不确定为什么时间会发生重大变化。我是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))
我已经构建了以下使用google的place api获取电话号码的小程序,但速度非常慢。当我测试6个项目时,它需要4.86秒到1.99秒,我不知道为什么时间会发生重大变化。我对API非常陌生,所以我甚至不确定哪些事情可以/不能加快,哪些事情留给为API提供服务的Web服务器处理,以及我自己可以改变什么。
问题内容: 我正在使用python的urllib2库向特定主机发出多个http请求。每次发出请求时,都会创建新的tcp和http连接,这会花费大量时间。有什么办法可以使用urllib2保持tcp / http连接的活动? 问题答案: 如果切换到httplib,则可以更好地控制基础连接。 例如: 这将在相同的基础TCP连接上发送2个HTTP GET。
我有一个在数据库上运行查询的API。由于查询执行时间可能很长,比如3分钟到10分钟,我的负载平衡器返回“上游请求超时”,但我可以看到查询已提交到数据源,但对最终用户来说,它显示了错误的消息。如何应对这种情况? 我的职能
问题内容: 我正在研究6B小文档的ES群集,这些文档以6.5K索引进行组织,总共6TB。索引在7台服务器之间复制和分片。索引占用量从几KB到几百GB不等。 在使用ES之前,我将Lucene与相同的文档组织一起使用。 基于Lucene的应用程序 的恢复 非常迅速 。实际上,当查询到达时,索引是延迟加载的,然后将IndexReader缓存起来,以加快以后的回复速度。 现在, 使用Elasticsear
我正在使用谷歌地图api获取城市之间的距离,获取这些距离后,我想将它们存储在数组中。但是谷歌api不允许无延迟请求。我如何添加延迟。或者有没有其他方法可以获得驾驶距离。这是代码 以上代码在没有循环的情况下运行良好。
我正在尝试向CloudScrape的在线网站scraper发出API请求,文档显示了以下示例。 POST /api/runs/{runId}/执行/输入/等待HTTP/1.1 X-CloudScrape-Access: ga09usdm8osdf8n9sodf X-CloudScrape-Account:87750c5f-7423-4438-b3f1-7b8b86990621 接受:applica
问题内容: 我正在尝试使用Alamofire快速发布尸体的发布请求。 我的json主体看起来像: 我正在尝试使 NSDictionnary看起来像: 我使用Alamofire的请求如下所示: 该请求有一个错误,我相信问题出在字典列表上,因为如果我在没有列表的情况下发出请求,它就可以正常工作,所以有什么主意吗? 我已经尝试过建议的解决方案,但是我遇到了同样的问题: 问题答案: 你近了 参数字典格式看