Python TypeError:“\u asyncio.Future”对象不可下标

2024-10-02 20:35:41 发布

您现在位置:Python中文网/ 问答频道 /正文

下午好!我正在制作一个程序,需要使用Python请求库向API发布10000个图像。发送每个请求后,我都会收到一个带有哈希(IpfsHash)的响应,我需要将其写入以下形式的字典:“hash”:“Number”。首先,我创建了一个简单的代码(使用循环,而不是使用异步),它工作正常。然后我用异步来加速。 代码如下:

import asyncio
import requests

jsonHashes = {}
responses = []

def pinToIPFS(number):
    url = 'https://api.pinata.cloud/pinning/pinFileToIPFS'
    par = {
        'pinata_api_key': 'blabla',
        'pinata_secret_api_key': 'blabla'
    }
    file = {'file': open(str(number) + '.jpg', 'rb')}

    res = requests.post(url, headers = par, files = file)
    jsonHashes[res.json()['IpfsHash']] = number
    print(res.json()['IpfsHash'] + ' = ' + str(number))


async def main():
    loop = asyncio.get_event_loop()
    futures = []
    for i in range(2):
        futures = loop.run_in_executor(None, pinToIPFS, i)
    for i in range(2):
        jsonHashes[await futures[i].json()['IpfsHash']] = i
    

loop = asyncio.get_event_loop()
loop.run_until_complete(main())


print(jsonHashes)

但是,由于某种原因,我得到了一个错误:

TypeError: '_asyncio.Future' object is not subscriptable

在那之后,我立即收到了对请求的回复:

QmcZR3cpeVzQ56gyWs83dRS51rtkqjyoF167paJMPrn32w = 1
QmehUERFcR6Erha6RtScDwfm1ACpZgGPrd5NNVnYWeDoH4 = 0

另外,为了简单起见,我用了2次迭代而不是10000次


Tags: 代码inimportloopapiasynciojsonnumber
2条回答

您必须以这种方式分离代码,以便真正等待结果:

f = await futures[i]
json = f.json()['IpfsHash']
jsonHashes[json]

问题在于:

    for i in range(2):
        futures = loop.run_in_executor(None, pinToIPFS, i)
    for i in range(2):
        jsonHashes[await futures[i].json()['IpfsHash']] = i

^{}返回一个对象,而不是它们的列表。我不知道如何重写代码以使其工作-首先,我不熟悉asyncio,但主要是因为我认为根本不需要第二个for循环

相关问题 更多 >