簡體   English   中英

將多進程與 API 請求和 Python 上的多個 for 循環一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM