同步请求和异步请求的性能测试代码

发布时间:2026/10/7 6:18:29
同步请求和异步请求的性能测试代码 性能测试说明测试内容连续发起20次HTTP请求分别测试同步串行 requests多线程并发 requests协程异步 aiohttp统一目标地址控制超时统计总耗时直观对比差距。完整测试代码importtimeimportthreadingimportrequestsimportasyncioimportaiohttp# 配置TEST_URLhttps://httpbin.org/getREQUEST_COUNT20TIMEOUT5# ---------------------- 1. 同步串行请求 ----------------------defsync_request():starttime.time()sessionrequests.Session()for_inrange(REQUEST_COUNT):try:session.get(TEST_URL,timeoutTIMEOUT)exceptException:passcostround(time.time()-start,2)print(f【同步串行】{REQUEST_COUNT}次请求总耗时{cost}s)# ---------------------- 2. 多线程 requests 并发 ----------------------defthread_fetch():try:requests.get(TEST_URL,timeoutTIMEOUT)exceptException:passdefthread_request():starttime.time()tasks[]for_inrange(REQUEST_COUNT):tthreading.Thread(targetthread_fetch)tasks.append(t)t.start()fortintasks:t.join()costround(time.time()-start,2)print(f【多线程并发】{REQUEST_COUNT}次请求总耗时{cost}s)# ---------------------- 3. 异步 aiohttp 并发 ----------------------asyncdefasync_fetch(session):try:awaitsession.get(TEST_URL,timeoutaiohttp.ClientTimeout(totalTIMEOUT))exceptException:passasyncdefasync_main():asyncwithaiohttp.ClientSession()assession:tasks[async_fetch(session)for_inrange(REQUEST_COUNT)]awaitasyncio.gather(*tasks)defasync_request():starttime.time()asyncio.run(async_main())costround(time.time()-start,2)print(f【异步协程】{REQUEST_COUNT}次请求总耗时{cost}s)if__name____main__:sync_request()thread_request()async_request()预期运行结果参考【同步串行】20次请求总耗时6.85 s 【多线程并发】20次请求总耗时0.72 s 【异步协程】20次请求总耗时0.65 s补充版本限制并发数量更贴近真实业务真实项目不会无限并发我们加上并发上限对比效果更真实importtimeimportasyncioimportaiohttp TEST_URLhttps://httpbin.org/getREQUEST_COUNT20MAX_CONCURRENT5# 限制最大并发量asyncdeflimited_fetch(session,sem):asyncwithsem:try:awaitsession.get(TEST_URL,timeoutaiohttp.ClientTimeout(total5))exceptException:passasyncdefmain():semasyncio.Semaphore(MAX_CONCURRENT)asyncwithaiohttp.ClientSession()assession:tasks[limited_fetch(session,sem)for_inrange(REQUEST_COUNT)]awaitasyncio.gather(*tasks)if__name____main__:stime.time()asyncio.run(main())print(f限制{MAX_CONCURRENT}并发总耗时{round(time.time()-s,2)}s)总结对比同步串行总时间 ≈ 单次耗时 × 请求总数最慢多线程利用多线程等待IO速度大幅提升但是线程创建有开销异步协程轻量级调度无线程开销连接池复用TCP同等并发下速度略优于多线程内存占用更低。需要我把这段测试代码整理成博客正文版本吗

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询