内容简介:云发购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 ",
]
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慢很多?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Okhttp同步请求源码分析
- 使用Spring Request-Reply实现基于Kafka的同步请求响应
- Node.js模拟发起http请求从异步转同步的5种方法
- 基于Netty和SpringBoot实现一个轻量级RPC框架-Client端请求响应同步化处理
- 多人游戏的网络实现:帧同步和状态同步
- MySQL主从同步机制和同步延时问题追查
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
赢在设计
[美] 洛芙迪 (Lance Loveday)、[美] 尼豪斯 (Sandra Niehaus) / 刘淼、枊靖、王卓昊 / 人民邮电出版社 / 2010-8 / 55.00
企业总是面临在网站设计和改进方面进行投资的抉择。怎样才能让有限的资金发挥出最大的效益呢?网站设计不应只是把网站做得赏心悦目,它更应该是提高经济收益和获得竞争优势的战略利器。是时候让网站发挥其潜能,以业务指标为导向来做设计决策,为提升网站收益而设计了。 作者凭借多年为众多网站做咨询工作的经验,为我们揭示了赢在设计的奥秘。它针对目前网站设计中存在的典型问题,先从宏观上探讨解决问题的战略手段,围绕......一起来看看 《赢在设计》 这本书的介绍吧!