gevent 为什么测试下来比多进程要慢很多?

2018-10-08 15:52:51 +08:00
 304464743

为什么 gevent 比多进程慢那么多?是不是只有 gevent 作为 http 服务器的时候才有优势?对于这种主动请求的没优势?

gevent:40 秒
----------------------------------------------------------------
start_time = time.time()
urls = ('http://www.baidu.com' for i in range(10000))
jobs = [gevent.spawn(requests.get, url) for url in urls]
#print(jobs)
gevent.joinall(jobs)
#print([job.value.status_code for job in jobs])
end_time = time.time()
print(end_time - start_time)
----------------------------------------------------------------

multiprocessing:12 秒
----------------------------------------------------------------
def req(url):
    return requests.get(url).status_code

if __name__ == '__main__':
    start_time = time.time()
    p = Pool(32)
    res_l = []
    for i in range(10000):
        res = p.apply_async(req, args=('http://www.baidu.com',))
        res_l.append(res)
    p.close()
    p.join()
    #print(len([i.get() for i in res_l]))
    end_time = time.time()
    print(end_time - start_time)
----------------------------------------------------------------
3461 次点击
所在节点    Python
6 条回复
xpresslink
2018-10-08 18:13:24 +08:00
你一个人吃完 5 个馒头,是一个咬一口轮吃快还是吃完一个再吃一个快?

要是 5 个人每人同时吃一个呢?
NoAnyLove
2018-10-09 11:06:07 +08:00
猴子呢?
cosven
2018-10-09 13:43:54 +08:00
这个代码有问题,你没有进行 monkey patch,也就是说,你的 requests.get 是阻塞同步的,而非异步非阻塞。
304464743
2018-10-10 11:55:10 +08:00
@NoAnyLove 有猴子的,代码没复制上来
lolizeppelin
2018-10-11 09:49:20 +08:00
协程单进城的 cpu 只能用一个啊

Python 主推协程是因为多线程不行

写法本来就是协程配多进城的
ysymi
2019-11-21 13:19:48 +08:00
一样遇到这个问题了 楼主有知道为什么吗 ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/495634

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX