python http长连接客户端

背景:

线上机器,需要过滤access日志,发送给另外一个api
期初是单进程,效率太低,改为多进程发送后,查看日志中偶尔会出现异常错误(忘记截图了。。。)
总之就是端口不够用了报错

原因:

每一条日志都是一次请求发送给api,短连接产生大量time_wait状态,占用了大量端口
这种高并发导致的大量time_wait状态内核调优基本是没用的,后来改为长连接解决问题

第一版短连接版本关键代码如下

因涉及具体业务信息,只贴出了关键部分代码

import pycurl
where True:
  url=myqueue.get()
  send_msg=pycurl.Curl()
  send_msg.setopt(pycurl.URL,url)
  send_msg.perform()
  print send_msg.getinfo(send_msg.HTTP_CODE)

修改后长连接版本如下:

采用requests库

import requests
client=requests.session()
headers = {'Content-Type': 'application/json', 'Connection': 'keep-alive'}
where True:
  url=myqueue.get()
  r=client.get(url,headers=headers)
  print r.status_code

转载于:https://www.cnblogs.com/soyops/p/pythonclient.html

Python中实现HTTP长连接,可以使用HTTP Keep-Alive机制。HTTP Keep-Alive机制允许客户端和服务器在同一TCP连接上发送和接收多个HTTP请求和响应,从而避免了每个请求和响应之间建立和关闭TCP连接的开销。 在Python中,可以使用requests库来实现HTTP Keep-Alive机制。具体的实现方式如下: ```python import requests # 创建一个Session对象,该对象会自动处理HTTP Keep-Alive机制 s = requests.Session() # 发送HTTP请求 response = s.get('http://example.com') # 发送另一个HTTP请求,该请求会在同一TCP连接上发送 response = s.get('http://example.com/another_request') ``` 在以上代码中,我们通过创建一个Session对象,并在该对象上发送HTTP请求,从而实现了HTTP长连接。注意,在发送第二个HTTP请求时,我们仍然使用了Session对象,这样可以确保该请求和第一个请求在同一TCP连接上发送。 另外,如果需要在HTTP请求头中添加Keep-Alive选项,可以使用以下代码: ```python import requests # 创建一个Session对象,该对象会自动处理HTTP Keep-Alive机制 s = requests.Session() # 设置HTTP请求头中的Keep-Alive选项 s.headers.update({'Connection': 'Keep-Alive'}) # 发送HTTP请求 response = s.get('http://example.com') ``` 在以上代码中,我们通过更新Session对象的HTTP请求头,添加了Keep-Alive选项。这样,该Session对象在发送HTTP请求时,会自动添加该选项,从而实现HTTP长连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值