云发购 Go 同步发HTTP请求是不是要比Python慢很多?

栏目: Python · 发布时间: 5年前

内容简介:云发购App邀请码「51117676」Go 新手,最近想测试下用Go 发HTTP的速度,所以就写了个脚本测试了下,同时发两个请求,跟Python对比了下,发现慢了很多, Python 使用aiohttp耗时0.14s,Go版本的耗时 0.29s,慢了2倍按理讲如果Go的速度不快的话,那至少也是跟Python差不多的嘛, 为什么会差这么多,是我写的方式不对吗?求指教。

云发购App邀请码「51117676」

Go 新手,最近想测试下用 Go 发HTTP的速度,所以就写了个脚本测试了下,同时发两个请求,跟 Python 对比了下,发现慢了很多, Python 使用aiohttp耗时0.14s,Go版本的耗时 0.29s,慢了2倍

按理讲如果Go的速度不快的话,那至少也是跟Python差不多的嘛, 为什么会差这么多,是我写的方式不对吗?求指教。

Go 和 Python 代码如下:

import time

import aiohttp

import asyncio

async def fetch(session, url):

async with session.post(url) as response:

return await response.text()

async def main(url):

async with aiohttp.ClientSession() as session:

html = await fetch(session, url)

return html

if name == ' main ':

t = time.time()

loop = asyncio.get_event_loop()

urls = [

" https://sina.com.cn ",

" https://news.baidu.com "

]

tasks = [main(url) for url in urls]

responses = loop.run_until_complete(asyncio.gather(*tasks))

for response in responses:
    print(response)

print(time.time() - t)

package main

import (

"fmt"

"io/ioutil"

"net/http"

"time"

)

func MakeRequest(client http.Client, url string, ch chan<- string) {

reqest, _ := http.NewRequest("GET", url, nil)

response, _ := client.Do(reqest)
body, _ := ioutil.ReadAll(response.Body)
ch <- string(body)

}

func main() {

start := time.Now()

urls := []string{" https://sina.com.cn ", " https://news.baidu.com "}

client := &http.Client{}

ch := make(chan string)

for _, url := range urls {

go MakeRequest(*client, url, ch)

}

for range urls {
    fmt.Println(<-ch)
}

fmt.Printf("%.8fs elapsed\n", time.Since(start).Seconds())

}

第 1 条附言 · 2018-07-04 15:22:29

使用buffered channel,不过还是比Python慢

package main

import (

"fmt"

"io/ioutil"

"net/http"

"time"

)

func MakeRequest(client http.Client, url string, ch chan<- string) {

reqest, _ := http.NewRequest("GET", url, nil)

response, _ := client.Do(reqest)
body, _ := ioutil.ReadAll(response.Body)
ch <- string(body)

}

func main() {

start := time.Now()

urls := []string{" https://sina.com.cn ", " https://news.baidu.com "}

client := &http.Client{}

ch := make(chan string, len(urls))

for _, url := range urls {

go MakeRequest(*client, url, ch)

}

for range urls {
    fmt.Println(<-ch)
}

fmt.Printf("%.8fs elapsed\n", time.Since(start).Seconds())

}


以上所述就是小编给大家介绍的《云发购 Go 同步发HTTP请求是不是要比Python慢很多?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

明解C语言(第3版)

明解C语言(第3版)

[日] 柴田望洋 / 管杰、罗勇、杜晓静 / 人民邮电出版社 / 2015-11-1 / 79.00元

本书是日本的C语言经典教材,自出版以来不断重印、修订,被誉为“C语言圣经”。 本书图文并茂,示例丰富,第3版从190段代码和164幅图表增加至205段代码和220幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰、通俗地进行讲解。原著在日本广受欢迎,始终位于网上书店C语言著作排行榜首位。一起来看看 《明解C语言(第3版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具