当前位置: 首页 > 知识库问答 >
问题:

在Python上使用multiprocess with API请求和multiple for循环

琴光亮
2023-03-14

我正在访问和API从巴西获得具体的公共预算。它需要定义年、月和页。我成功地使用for循环来获取我想要的2020年的信息,通过月{j}和页(str+1)进行循环。

我如何并行化以下内容(如果我可以将其转换为def函数并使用map就更好了)?

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

共有1个答案

苗烈
2023-03-14

一种想法可能是将代码放在嵌套的for循环中,并将其分解为一个函数:

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之类的东西,并将其与您的值进行映射。你可以做得更好,但非常天真:

list1 = []
parameters = []

pool = ThreadPoolExecutor(workers=4)

for i in tqdm(range(x)):
    for j in tqdm(range(1,12)):
        parameters.append((i, j))

list1 = pool.map(get_data, parameters)
 类似资料:
  • 问题内容: 我想使用Tor向网页发出多个GET请求。我想为每个请求使用不同的ipaddress。 使用此,我提出了一个请求。如何更改ipaddress来做另一个? 问题答案: 这是您要使用的代码(使用来下载词干包) 祝你好运,希望能成功。

  • 问题内容: 是否可以使用Python的库发送SOAP请求? 问题答案: 确实有可能。 这是一个使用普通请求lib调用Weather SOAP Service的示例: 一些注意事项: 标头很重要。没有正确的标头,大多数SOAP请求将无法工作。可能是更 正确 使用的标头(但weatherservice更喜欢 这将以xml字符串形式返回响应-然后,您需要解析该xml。 为简单起见,我以纯文本形式包含了该

  • 问题内容: 我想知道为什么当我这样依次调用request.get()方法时: 我对所有请求的状态都良好,但是当我在for循环中执行该状态时,例如: 除最后一个请求外,所有请求我都得到400(错误)。 附加信息:SO上有一个相关的问题,其中提到了两种应对这种情况的方法:等待,标题。 在我的情况下 以及标题中,wait不起作用-我不知道在那里提供了什么。 更新:我正在尝试实现的特定版本: 问题答案:

  • 我正在执行使用Python请求库上传文件的简单任务。我搜索了Stack Overflow,似乎没有人遇到同样的问题,即服务器无法接收文件: 我正在用我的文件名填充upload_file关键字的值,因为如果我把它留空,它会说 现在我得到了 只有当文件为空时才会显示。所以我一直在思考如何成功地发送文件。我知道这个文件是有效的,因为如果我去这个网站手动填写表单,它会返回一个匹配对象的列表,这就是我想要的

  • 问题内容: 我可以在Google App Engine上使用请求吗?我认为该库非常适合创建REST客户端。 问题答案: 是。 __如果您启用了计费功能(启用套接字支持),则 在Google Appengine(版本1.9.18)上, 请求 版本2.3.0 可以在生产中使用 (但不适用于SDK)。 更新 :从2017年1月31日起,Requests可以在生产中使用2.9.1版本。但是,它不适用于Go

  • 问题内容: 我正在尝试使用Python访问poloniex.com(一种加密货币交易所)上的交易API。为此,我必须遵循以下规定: 所有对交易API的调用都通过HTTP POST发送到https://poloniex.com/tradingApi,并且必须包含以下标头: 密钥-您的API密钥。 签名-根据HMAC-SHA512方法,由您的键的“秘密”对查询的POST数据进行签名。 此外,所有查询都