requests基础笔记

requests基础笔记,第1张

ookies对象基本上就是一个字典 把它转换成一个包含元组的列表,然后用合适的分隔符连接起来就好了 1 2 3 4 5 import requests resp = requestsget(url) cookies = respcookies print('; 'join(['='join(item) for item in cookiesitems()]))

你需要安装requests库,然后给你讲一下思路。

需要登录

登录的话又两种方法,先用requests初始化一个session,然后直接请求登录连接,传入用户名和密码,如果有其它限制,比如验证码之类的不好 *** 作就可以使用第二种,直接使用cookies,先手动登录网站,将cookies保存下来,然后在添加到session就可以了

数据是异步加载的

这个也是在第一步的情况下才能 *** 作,因为进行查询可能会验证你是否登录,如果第一步成功了,那就直接请求这个查询接口,将参数传入,获取返回值进行解析即可。

下面是requests官方文档,你需要的都在这里面了

requests官方文档

zookeeper集群为了保证数据一致性,使用了两阶段提交。

在zookeeper集群的角色有:leader、follower、observer。

在这几个角色中处理读写请求是不同的:

读请求:从当前节点直接读取数据

写请求:在leader直接进行两阶段提交、在非leader则是把请求转交给leader处理

所以,分析两阶段提交就是分析集群模式下的请求处理。在单机模式在请求处理是经过RequestProcessor请求处理链处理。

单个zookeeprt请求处理主要有以下几步:

1、对当前请求生成日志txn

2、持久化日志txn

3、根据日志txn更新Database

两阶段提交(2PC)步骤:

其中标绿色的PrepRequestProcessor、SyncRequestProcessor、CommitProcessor都继承了ZooKeeperCriticalThread是一个线程。

orgapachezookeeperserverquorumLeaderZooKeeperServer#setupRequestProcessors

orgapachezookeeperserverquorumProposalRequestProcessor#ProposalRequestProcessor

orgapachezookeeperserverquorumLeaderRequestProcessor#processRequest

①、检查是不是local session本地session,创建临时节点会升级session

orgapachezookeeperserverquorumQuorumZooKeeperServer#checkUpgradeSession

②、交给下一个请求处理器处理

作用与单机模式相同,给请求Request的Hdr和Txn赋值,然后交给下一个请求处理器处理

如果是写请求(requestgetHdr() != null),则会把当前请求封装为协议并发送给follower。发送之后交给SyncRequestProcessor持久化处理

orgapachezookeeperserverquorumLeader#propose

orgapachezookeeperserverquorumLeader#sendPacket

发送到所有其他Followe节点forwardingFollowers

把请求放入到queuedRequests阻塞队列

①、对请求进行持久化与单机相同

orgapachezookeeperserverSyncRequestProcessor#run

向lead发送自己的ack(2PC发送ACK)

orgapachezookeeperserverquorumLeader#processAck

orgapachezookeeperserverquorumLeader#tryToCommit

orgapachezookeeperserverquorumCommitProcessor#commit

提交当前请求,放入到committedRequests,最终会更新database

CommitProcessor类参数:

queuedRequests:表示接收到的请求,没有进行两阶段的提交

queuedWriteRequests:表示接收到的写请求,没有进行两阶段的提交

committedRequests:表示可以提交的请求,在两阶段验证过半之后进行会在本地进行committe *** 作,便添加到这个队列

commitIsWaiting:表示存在可以提交的请求(committedRequests是否有值,有true)

pendingRequests:是一个map集合,表示每个客户端sessionId的请求

Leader类参数:

outstandingProposals:表示记录提议的请求的队列,符合过半机制之后会移除

toBeApplied:表示记录待生效的请求,在FinalRequestProcessor移除

①、processRequest

orgapachezookeeperserverquorumCommitProcessor#processRequest

首先判断是否需要两阶段提交。如果需要则会添加到queuedWriteRequests队列

orgapachezookeeperserverquorumCommitProcessor#needCommit

如果是更改 *** 作则返回true

d、然后,再看一下这个while的退出条件。

①、从queuedRequests取出的是空

②、如果queuedRequests数据不为空,那么requestsToProcess是大于0的。这时只有maxReadBatchSize < 0或readsProcessed <= maxReadBatchSize才能退出。

maxReadBatchSize < 0表示默认是-1,如果配置了这个参数当连续读了readsProcessed时,也会退出。

③、pendingRequests和committedRequests不为空

e、commitIsWaiting有待提交的

orgapachezookeeperserverquorumLeaderToBeAppliedRequestProcessor#processRequest

删除toBeApplied

其中标绿色的FollowerRequestProcessor、CommitProcessor、SyncRequestProcessor都继承了ZooKeeperCriticalThread是一个线程。

orgapachezookeeperserverquorumFollowerZooKeeperServer#setupRequestProcessors

开了两条链:

FollowerRequestProcessor(firstProcessor)---->CommitProcessor----->FinalRequestProcessor

SyncRequestProcessor---->SendAckRequestProcessor

orgapachezookeeperserverquorumFollowerRequestProcessor#processRequest

请求添加到queuedRequests队列

FollowerRequestProcessor是一个线程,会从queuedRequests获取请求

orgapachezookeeperserverquorumFollowerRequestProcessor#run

createSession和closeSession也会转发给lead节点处理

orgapachezookeeperserverquorumSendAckRequestProcessor#processRequest

在用SendAckRequestProcessor处理之前会先调用SyncRequestProcessor进行持久化处理,由于与单机或lead处理相同就不单独列出来了。

向领导者发送确认ack包

orgapachezookeeperserverquorumLearner#writePacket

在经过FollowerRequestProcessor处理后,lead端会得到一个Request的请求

orgapachezookeeperserverquorumLearnerHandler#run

orgapachezookeeperserverquorumLeader#submitLearnerRequest

在连接Follower节点的客户端发送更改命令请求会转发到leader节点的prepRequestProcessor进行处理

1、run

orgapachezookeeperserverquorumQuorumPeer#run

2、followLeader

orgapachezookeeperserverquorumFollower#followLeader

不断读取从lead端的数据包

orgapachezookeeperserverquorumFollowerZooKeeperServer#logRequest

其中标绿色的ObserverRequestProcessor、CommitProcessor、SyncRequestProcessor都继承了ZooKeeperCriticalThread是一个线程。

orgapachezookeeperserverquorumObserverZooKeeperServer#setupRequestProcessors

也是开了两条链:

ObserverRequestProcessor(firstProcessor)---->CommitProcessor----->FinalRequestProcessor

SyncRequestProcessor---->null

observer节点不参与两阶段提交,所以同步SyncRequestProcessor之后没有ACK确认提交。这样既提高了读效率,又对写效率没有影响。请求处理链与leader、follower的功能相同不再累述。

zookeeper集群的两阶段提交,是在写 *** 作的情况下发生的。2PC的整体实现逻辑是在RequestProcessor请求处理链处理的。只有在接受到的ACK超过一半才会进行提交,提交的实现逻辑是在CommitProcessor中实现的,CommitProcessor处理器中里面涉及多种集合、队列等参数(需要首先了解这些参数意义,然后再读CommitProcessor源码)。

以上就是关于requests基础笔记全部的内容,包括:requests基础笔记、如何用 Python 爬取需要登录的网站、python requests session和session的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9415118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存