首页 > 解决方案 > 在 python 中为 requests.futures 添加标头和数据的问题

问题描述

我对下面的代码有问题:


    # !pip install requests_futures
    from concurrent.futures import as_completed
    from pprint import pprint
    from requests_futures.sessions import FuturesSession
    
    session = FuturesSession()
    data = {
        'code' : 'abc123'
    }
    futures=[]
    for i in range(10):
        code = '{0:05}'.format(i)
        data['code'] = 'abc{}'.format(code)
        future = session.get(f'http://httpbin.org/delay/{i}',data=data)
        future.i = i
        futures.append(future)
    
    for future in as_completed(futures):
        resp = future.result()
        pprint({
            'i': future.i,
            'code': resp.request.body,
            # 'content': resp.json(),
            'url': resp.url
        })

我们期望的结果是 abc0001, abc0002,... abc0009 就像 url 但结果不同。我知道这是由并发程序引起的,但我不知道如何调试,任何人都可以帮助我吗?


    {'code': 'code=abc00000', 'i': 0, 'url': 'http://httpbin.org/delay/0'}
    {'code': 'code=abc00002', 'i': 1, 'url': 'http://httpbin.org/delay/1'}
    {'code': 'code=abc00004', 'i': 2, 'url': 'http://httpbin.org/delay/2'}
    {'code': 'code=abc00003', 'i': 3, 'url': 'http://httpbin.org/delay/3'}
    {'code': 'code=abc00004', 'i': 4, 'url': 'http://httpbin.org/delay/4'}
    {'code': 'code=abc00009', 'i': 5, 'url': 'http://httpbin.org/delay/5'}
    {'code': 'code=abc00007', 'i': 6, 'url': 'http://httpbin.org/delay/6'}
    {'code': 'code=abc00007', 'i': 7, 'url': 'http://httpbin.org/delay/7'}
    {'code': 'code=abc00009', 'i': 8, 'url': 'http://httpbin.org/delay/8'}
    {'code': 'code=abc00009', 'i': 9, 'url': 'http://httpbin.org/delay/9'}

标签: pythonconcurrency

解决方案


推荐阅读