如何帮助请求的异步模式? [英] how enable requests async mode?
本文介绍了如何帮助请求的异步模式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这code:
import sys
import gevent
from gevent import monkey
monkey.patch_all()
import requests
import urllib2
def worker(url, use_urllib2=False):
if use_urllib2:
content = urllib2.urlopen(url).read().lower()
else:
content = requests.get(url, prefetch=True).content.lower()
title = content.split('<title>')[1].split('</title>')[0].strip()
urls = ['http://www.mail.ru']*5
def by_requests():
jobs = [gevent.spawn(worker, url) for url in urls]
gevent.joinall(jobs)
def by_urllib2():
jobs = [gevent.spawn(worker, url, True) for url in urls]
gevent.joinall(jobs)
if __name__=='__main__':
from timeit import Timer
t = Timer(stmt="by_requests()", setup="from __main__ import by_requests")
print 'by requests: %s seconds'%t.timeit(number=3)
t = Timer(stmt="by_urllib2()", setup="from __main__ import by_urllib2")
print 'by urllib2: %s seconds'%t.timeit(number=3)
sys.exit(0)
这个结果:
by requests: 18.3397213892 seconds
by urllib2: 2.48605842363 seconds
在嗅探器,它看起来这样的:
in sniffer it looks this:
说明:前5个请求被请求库sended,未来5请求被urllib2的库sended。
红 - 是时候工作是冻结,黑暗 - ?!当数据接收...跆拳道
description: first 5 requests are sended by requests library, next 5 requests are sended by urllib2 library. red - is time when work was freeze, dark - when data receiving... wtf?!
如何它更多钞票,当套接字库修补和库必须相同工作?
如何使用无需requests.async请求asynchronious工作?
推荐答案
对不起肯尼斯·赖茨。他的书房是美好的。
Sorry Kenneth Reitz. His library is wonderful.
我笨。我需要选择这样的httplib的猴子补丁:
I am stupid. I need select monkey patch for httplib like this:
gevent.monkey.patch_all(httplib=True)
由于对httplib的补丁程序默认是禁用的。
Because patch for httplib is disabled by default.
这篇关于如何帮助请求的异步模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文