[英]Use multiprocess with API requests and multiple for loops on Python
我正在訪問 API 以獲取巴西的具體公共預算。 它需要定義年、月和頁。 我成功地使用 for 循環來獲取我想要的 2020 年信息,循環通過月份 {j} 和頁面 (str +1)。
如何並行化以下內容(如果我可以將其轉換為 def function 並使用地圖,那就更好了)?
list1 = []
for i in tqdm(range(x)):
for j in tqdm(range(1,13)):
url = f'https://gatewayapi.prodam.sp.gov.br:443/financas/orcamento/sof/v3.0.1/empenhos?anoEmpenho=2020&mesEmpenho={j}&codOrgao=84&numPagina=' + str(i+1)
headers = {"Accept": "application/json", "Authorization": "Bearer xxxxxxxxxxxxxx"}
response = requests.get(url, headers = headers)
list1.append(response.json())
df_final = pd.DataFrame()
for i in range(len(list1)):
df_temp = pd.DataFrame(list1[i]['lstEmpenhos'])
df_final = df_final.append(df_temp)
df_final
一種想法可能是將代碼放入嵌套的 for 循環中並將其分解為 function:
def get_data(pair):
i, j = pair
url = f'https://gatewayapi.prodam.sp.gov.br:443/financas/orcamento/sof/v3.0.1/empenhos?anoEmpenho=2020&mesEmpenho={j}&codOrgao=84&numPagina=' + str(i+1)
headers = {"Accept": "application/json", "Authorization": "Bearer xxxxxxxxxxxxxx"}
response = requests.get(url, headers = headers)
return response.json()
然后你可以使用ThreadPoolExecutor
和 map 之類的東西來反對你的價值觀。 你可以做得更好,但非常天真:
list1 = []
parameters = []
pool = ThreadPoolExecutor(workers=6)
for i in tqdm(range(x)):
for j in tqdm(range(1,12)):
parameters.append((i, j))
list1 = list(pool.map(get_data, parameters[0:x]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.