面向人类的异步python http。

gain-requests-futures的Python项目详细描述


针对人类的异步python http请求图片:https://travis-ci.org/ross/requests-futures.png?branch=master
:目标:https://travis ci.org/ross/requests futures

python请求http库的小插件。使用python 3.2的concurrent.futures或backport作为python的早期版本。


附加的api和更改是最小的,并尽量避免意外。


代码块::python


from requests import session

.get('http://httpbin.org/get?foo=bar')
利用未来,因此通过创建
未来会话并用返回的未来代替响应来实现异步。
响应可以通过在将来调用result方法来检索:

。代码块::python

from requests\u futures.sessions import future session


session=futuresession()
\first request is started in background
future\u one=session.get('http://httpbin.org/get')
\second requests is started immediately
future_two=session.get('http://httpbin.org/get?foo=bar')
已经
响应二=未来二.结果()
打印("响应二状态:{0}"。格式(响应二.状态二代码))
打印(响应二.内容)

如果您希望
调整该值或在多个会话中共享执行器,则可以向FutureSession构造函数提供


。代码块::python

from concurrent.futures导入threadpoolexecutor
from requests\futures.sessions导入futures session

session=futuressession(executor=threadpoolexecutor(max_workers=10))
您可以将
`max_workers`直接传递给'futuression'构造函数的编号:

…代码块::python

from requests\u futures.sessions import futuresession
session=futuresession(max_workers=10)


futuresession将使用现有会话对象(如果提供):

。代码块::python

from requests import session
from requests\future s.sessions import futuresession
my\u session=session()
futuresession=futuresession(session=my\u session)

除了返回未来而不是响应之外,保留requests.session的api而不做任何修改。与所有未来异常一样,
将被转移(抛出)到未来。result()调用,因此try/except块应该被移到那里。


取消排队请求(也就是在您自己之后清理)
期货交易中的NSE尚未解决,最好取消这些请求。您可以使用会话作为上下文管理器来执行此操作:

…代码块::python

from requests\u futures.sessions导入futuresession
futuresession(max_workers=1)作为se会话:
future=session.get('https://httpbin.org/get')
future2=session.get('https://httpbin.org/delay/10')
future3=session.get('https://httpbin.org/delay/10')
response=future.result()

跳过,节省时间和资源,否则将浪费这些资源。


在后台工作

r/>背景线程。这对于将工作从前台转移出去很有用,
对于一个简单的示例,以json解析为例。代码块::python

from pprint import pprint
from requests\futures.sessions import futuresession


分析存储响应对象结果的json
resp.data=resp.json()

future=session.get('http://httpbin.org/get',background戋callback=bg戋cb)
做些其他的事情,在这个过程中发送更多的请求
response=future.result()
print('response status{0}'。格式(response.status戋code))
附加到后台的响应对象
pprint(response.data)






顾名思义,请求将在单独的进程而不是线程中并发执行。代码块::python

from concurrent.futures导入processpoolexecutor
from requests\u futures.sessions导入futures session

session=futuressession(executor=processpoolexecutor(max_workers=10))
像以前一样使用。提示:
使用"processpoolexecutor"非常有用,如果每个请求的内存使用率非常高(响应较大),并且需要循环解释程序
才能将内存释放回操作系统。

使用"processpoolexecutor"的基本要求是"session.requeue"st`、
`futuresession`和(可选的)`background_callback`都是可pickle的。

这意味着只有python 3.5是完全支持的,而python版本
3.4和更高版本要求在初始化"futuresession"时传递现有的"requests.session"实例。python 2.x和<;3.4目前不受支持。代码块::python

会话=会话())
…与以前一样使用

如果酸洗失败,则会引发指向此文档的异常。

…代码块::python

session=session())
回溯(最近一次调用):

运行时错误:无法pickle函数。请参阅文档:https://github.com/ross/requests futures/using processpoolexecutor

。重要提示:
*python>;=3.4必需
*使用python时需要会话实例<;3.5
*如果对"未来会话"进行子分类,则必须是可导入的(模块全局)
*如果使用"后台回调",则也必须是可导入的(模块全局)



==


pip一nstall请求未来

…_`请求`:https://github.com/kennethritz/requests
…_` concurrent.futures`:http://docs.python.org/dev/library/concurrent.futures.html
。_后台:https://pypi.python.org/pypi/futures



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
从log4j迁移到log4j2时发生java错误   java为什么我不能运行hello swing应用程序?   Java反射:按声明顺序获取字段和方法   java将日期设置为每周的第二天   在Java中使用包装器和随机森林分类器进行特征选择时出现weka错误   oop对随机生成的Java数字有问题   java使用PhoneNumberUtils检查联系人中是否存在号码。比较()   java无法在Tomcat 7(org.apache.catalina.LifecycleeException)上部署YouTrack   java无法添加自定义视图类   java如何从服务器端更改HttpServletRequest中的IP?   java GemFire 8.2.0集群使用缓存中的静态服务器列表。xml   运行google maps API v2约20分钟时出现java JNI错误   java在IntelliJ IDEA中创建一个可执行的jar