使用 asyncio 加速测试
speed up test with asyncio
这是我的代码
@pytest.mark.asyncio
async def test_async():
res = []
for file_id in range(100):
result = await get_files_async(file_id)
res.append(result)
assert res == [200 for _ in range(100)]
async def get_files_async(file_id):
kwargs = {"verify": False, "cert": (cert, key)}
resp = requests.request('GET', url, **kwargs)
return resp.status_code
pytest 的计时显示需要 118 秒才能完成,这与按顺序向 url 发送请求的测试非常接近。
有什么改进可以加快这个测试吗?谢谢
您无法使用异步来加快速度,因为您使用的是 requests
,这是一个同步 pkg,因此每次调用都会停止偶数循环。
您可以切换到 运行 在线程中处理请求,或者切换到像 httpx 或 aiohttp 这样的异步 pkg
如果您切换到不同的 pkg,请将 test_async
更改为 运行 并行请求
@pytest.mark.asyncio
async def test_async():
tasks = []
for file_id in range(100):
tasks.append(asyncio.create_task(get_files_async(file_id)))
res = await asyncio.gather(*tasks)
assert res == [200 for _ in range(100)]
这是我的代码
@pytest.mark.asyncio
async def test_async():
res = []
for file_id in range(100):
result = await get_files_async(file_id)
res.append(result)
assert res == [200 for _ in range(100)]
async def get_files_async(file_id):
kwargs = {"verify": False, "cert": (cert, key)}
resp = requests.request('GET', url, **kwargs)
return resp.status_code
pytest 的计时显示需要 118 秒才能完成,这与按顺序向 url 发送请求的测试非常接近。 有什么改进可以加快这个测试吗?谢谢
您无法使用异步来加快速度,因为您使用的是 requests
,这是一个同步 pkg,因此每次调用都会停止偶数循环。
您可以切换到 运行 在线程中处理请求,或者切换到像 httpx 或 aiohttp 这样的异步 pkg
如果您切换到不同的 pkg,请将 test_async
更改为 运行 并行请求
@pytest.mark.asyncio
async def test_async():
tasks = []
for file_id in range(100):
tasks.append(asyncio.create_task(get_files_async(file_id)))
res = await asyncio.gather(*tasks)
assert res == [200 for _ in range(100)]