V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
whereabouts
V2EX  ›  程序员

Python 持续每秒对 API 服务器发送 2000 个 HTTP 请求的比较好的解决方案?

  •  
  •   whereabouts · 2018-09-29 09:11:52 +08:00 · 7259 次点击
    这是一个创建于 2281 天前的主题,其中的信息可能已经有所发展或是发生改变。
    HTTP 的 Session 没什么要求。目标是一个 API 服务器,所以只有 1 个 IP。
    或者还是 Nodejs/Golang 实现起来更合适一点?
    22 条回复    2019-08-24 21:30:04 +08:00
    zhengyongtao
        1
    zhengyongtao  
       2018-09-29 09:22:13 +08:00   ❤️ 1
    用 tornado
    lniwn
        2
    lniwn  
       2018-09-29 09:23:24 +08:00 via Android   ❤️ 1
    aiohttp clientsession, per_host_limit=2000,对于 1 秒这个问题,如果要求不是很严格,ayncio.sleep 即可。
    iBaoger
        3
    iBaoger  
       2018-09-29 09:24:23 +08:00 via Android
    apache ab 不好用吗
    whereabouts
        4
    whereabouts  
    OP
       2018-09-29 09:29:48 +08:00
    忘了说了,需求是可自定义 HTTP 请求的 Header、Cookie、Url 参数。 不过一般都能做到吧,主要是考虑下用哪个方案合适一点。
    owenliang
        5
    owenliang  
       2018-09-29 09:50:48 +08:00
    你会啥用啥呗。
    Akikiki
        6
    Akikiki  
       2018-09-29 09:51:41 +08:00
    Locust
    Qzier
        7
    Qzier  
       2018-09-29 09:55:29 +08:00 via iPad
    有现成的工具为什么不用? nodejs 写的 loadtest,c 语言写的 wrk。
    Kilerd
        8
    Kilerd  
       2018-09-29 10:12:56 +08:00   ❤️ 1
    2000qps 先考虑一下数据库的优化吧,python 的极大框架都能撑起这个 qps。
    实在不行就用 docker,横向扩展做负载均衡
    uwh0am1
        9
    uwh0am1  
       2018-09-29 10:22:28 +08:00
    aio
    crawl3r
        10
    crawl3r  
       2018-09-29 10:29:31 +08:00
    requests + gevent + 多进程
    ltoddy
        11
    ltoddy  
       2018-09-29 10:51:58 +08:00
    asyncio + urlopen + concurrent.futures.ThreadExecutorPool
    EINDEX
        12
    EINDEX  
       2018-09-29 14:07:41 +08:00
    aiohttp
    my3157
        13
    my3157  
       2018-09-29 14:11:51 +08:00
    是压测么? 试试 tsung
    gimp
        14
    gimp  
       2018-09-29 14:22:55 +08:00
    试试 wrk 呢
    qq976739120
        15
    qq976739120  
       2018-09-29 14:26:54 +08:00
    ab
    yc8332
        16
    yc8332  
       2018-09-29 15:41:05 +08:00
    go 吧。2000 个 goroutine 又简单。
    janxin
        17
    janxin  
       2018-09-29 16:03:27 +08:00
    https://locust.io/ 现成的框架提交个任务不就行了
    Leigg
        18
    Leigg  
       2018-09-29 19:10:53 +08:00 via iPhone
    go 一下很轻松
    exiaohao
        19
    exiaohao  
       2018-09-29 19:20:40 +08:00
    自己撸代码就 requests + gevent, 闲得蛋疼用 celery 也可以啊
    楼上说的 Locust 也可以了解一下~
    zhzer
        20
    zhzer  
       2018-09-29 19:23:17 +08:00 via Android
    http 测试用 go 写很简单
    luozic
        21
    luozic  
       2018-09-29 20:08:16 +08:00 via iPhone
    python 没你想的那么慢。 纯的 python,合理的代码搞这个无压力。并且 python 有部分 http 请求库底层是被用重写过的,担心个毛。
    bantianys
        22
    bantianys  
       2019-08-24 21:30:04 +08:00
    Locust 是用 requests 库,加上只能用单个 CPU 核心。性能会比 wrk 差不少。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5342 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:33 · PVG 15:33 · LAX 23:33 · JFK 02:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.