python - 在异步 def 循环执行器中完成请求时如何添加请求参数?
问题描述
如何在下面添加像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())
解决方案
您可以使用部分:
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...'
)
推荐阅读
- kotlin - Kotlin - 一种将可变列表公开为不可变列表的优雅方式
- swift - 如何快速将导航项按钮连接到视图控制器?
- rust - 为什么 Rust f32 没有给出好的解决方案,而 f64 有?
- c++ - 谷歌测试的“测试框架意外退出错误”
- spring - 具有不同键/值的 Spring Cloud Stream 中的多个输出绑定(AKA 分支)
- c# - 如果在应用程序启动时创建和播种大约 120k 的记录,有什么方法可以加快应用程序的响应时间?
- javascript - 为什么我的 else if 语句在这种情况下不起作用?
- python - MS Word:添加隐藏的评论
- c# - 按住 Shift 时如何启用速度提升
- python - 包含所有文本的功能
标签,但从该字符串中排除斜体文本