我目前正在運行一個Python腳本來通過Sonkick API收集音樂會數據。雖然腳本正在運行,但一段時間後,速度變得非常緩慢。我正在尋找解決此問題的最有效方法。API Python腳本在一段時間後變慢,如何讓代碼更快?
下面你可以找到我的腳本:
import urllib2
import requests
import json
from tinydb import TinyDB, Query
db = TinyDB('concerts_songkick.json')
#retrieve concert data for every artist in artistid.txt
def load_events():
MIN_DATE = "2015-05-26"
MAX_DATE = "2017-04-25"
API_KEY= "##############"
with open('artistid.txt', 'r') as f:
for a in f:
artist = a.strip()
print(artist)
url_base = 'http://api.songkick.com/api/3.0/artists/{}/gigography.json?apikey={}&min_date={}&max_date={}'
url = url_base.format(artist, API_KEY, MIN_DATE, MAX_DATE)
try:
r = requests.get(url)
resp = r.json()
if(resp['resultsPage']['totalEntries']):
results = resp['resultsPage']['results']['event']
for x in results:
print(x)
db.insert(x)
except:
print('cannot fetch url',url);
load_events()
db.close()
print ("End of script")
是否有可能api根據請求的數量限制您的請求?無論如何,你可以使用進程池來並行化你的代碼。 – suvy
不要使用'string.format'來構建URL,至少在事先沒有正確的URL轉義值的情況下。 'MIN_DATE','MAX_DATE'和'API_KEY'可能適合使用未轉義,但'藝術家'絕對需要轉義。 – Tomalak
聽起來像API節制你,我沒有看到任何理由爲什麼執行會減慢。您總是可以嘗試打印請求獲取每個頁面所用的時間,並查看時間增加? – Baldrickk