代码之家  ›  专栏  ›  技术社区  ›  barciewicz

当请求在异步定义循环执行器中完成时,如何添加请求参数?

  •  1
  • barciewicz  · 技术社区  · 6 年前

    如何添加参数,如 verify proxies 到下面 requests.get ?

    在非异步设置中,我只需要 requests.get(url, proxies='some_proxy', verify=False) 但是我不知道怎么把它写在下面。

    import asyncio
    import concurrent.futures
    import requests
    
    ids = [2048854772, 2042055933, 2036234693, 2007740886, 2006259847, 2003100744]
    token = '111111'
    max_workers = len(ids)
    
    async def main():
        with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
            loop = asyncio.get_event_loop()
            futures = [
                loop.run_in_executor(
                    executor, 
                    requests.get, 
                    'https://www.strava.com/api/v3/activities/{id}?include_all_efforts=true&access_token={token}'.format(id=id, token=token)
                )
                for id in ids
            ]
            for response in await asyncio.gather(*futures):
                print(response.text)
                pass
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Rémi Héneault    6 年前

    你可以使用 partial :

    from functools import partial
    
    def sum(a, b):
        return a + b
    
    sum_with_two = partial(sum, 2)
    sum_with_two(5)
    >>> 7
    
    sum_two_and_four = partial(sum, 2, 4)
    sum_two_and_four()
    >>> 6
    

    在你的情况下:

    my_request = partial(requests.get, proxies='...', verify=False)
    
    loop.run_in_executor(
        executor, 
        my_request,  # Arguments of the partials will be used 
        '...url...'
    )