Как добавить параметры запросов, когда запрос выполняется в async def loop loop executor? - PullRequest
0 голосов
/ 18 января 2019

Как добавить такие параметры, как 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 Ответ

0 голосов
/ 18 января 2019

Вы можете использовать частичное :

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...'
)
...