文档章节

pycurl.CurlMulti中如何检测发生故障的句柄

junanhonglei
 junanhonglei
发布于 2016/05/08 22:10
字数 413
阅读 77
收藏 1
点赞 2
评论 0
#-*-coding:utf-8 -*-
'''
  问题:
   1,pycurlmulti如何在运行中检测到出现故障的请求?
        a) m.perform 返回的正确数小于加入的句柄数
        b) m.info_read 读取发生故障的句柄及原因(注意只能给读取一次)
        c) 移除句柄,然后重新添加。
'''
import time
import threading
from functools import partial
import traceback
import pycurl
from io import BytesIO

MAX_CONNCETION_NUM = 500


index2count= {}
#避免运行时增加
for index in range(MAX_CONNCETION_NUM):
    index2count[index] = 0
    
def period_check():
    while True:
        now = time.time()
        count =0
        for k,v in index2count.items():
            print (k,v)
            count += v
        print ("---------------",count)
        time.sleep(10)
        
def dealer_data( buffer,index ):
    index2count[index] +=1

def get_one_curl( url,index):
    #lc_data = threading.local()
    c = pycurl.Curl()
    c.setopt(c.NOSIGNAL, 1) #解决抛出SegmentFault的问题,
    # 2 设置选项 
    c.setopt(c.WRITEFUNCTION, partial(dealer_data,index=index ) )
    #STR;BRUX0;Brussels;RTCM 3.0;1004(1),1006(10),1008(10),1012(1);2;GPS+GLO;IGS;BEL;50.47;4.21;0;0;SEPT POLARX4TR;none;B;N;1300;ROB
    c.setopt(c.URL, url )
    c.setopt(pycurl.USERPWD,"user:passwd")
    #c.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_0 )
    c.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_BASIC)
    c.setopt(pycurl.HTTPHEADER, ("Ntrip-Version: Ntrip/2.0",'User-Agent: NTRIP ExampleClient/2.0'))#此处为必须!
    return c
    
def build_pycurlmulti( dest_url, connection_num ):
    '''
       短时间内发起大量连接会被拒绝
    '''
    m = pycurl.CurlMulti()
    curls =[]
    
    for index in range(connection_num):
        c = get_one_curl( dest_url, index  )
        curls.append(c)
        m.add_handle( c )    
        #ret, num_handles = m.perform()
        #time.sleep(0.1) #每隔1秒添加一个句柄,防止大量并发连接请求被服务器拒绝。
    while 1:
        ret = m.select(1.0)
        if ret == -1:  continue
        while 1:
            ret, num_handles = m.perform()

            if connection_num != num_handles:
                error_info = m.info_read()[2]
                for curl_obj, error_num,error_str in error_info:
                    #7 Failed to connect to fastgis.cn port 5000: Timed out
                    #56 Recv failure: Connection was reset
                    if error_num in (7,56):
                        m.remove_handle(curl_obj)
                        m.add_handle(curl_obj)
            if ret != pycurl.E_CALL_MULTI_PERFORM: 
                break            
    '''
    Ntrip-Version: Ntrip/2.0<CR><LF>
    User-Agent: NTRIP ExampleClient/2.0<CR><LF>    
    '''    


import threading
threads = []
# 1,看门狗,状态检测线程
threads.append( threading.Thread(target=period_check, args=()  ) )
# 2, 
host="http://fastgis.cn:5000/file"
threads.append( threading.Thread(target=partial(build_pycurlmulti , dest_url=host,  connection_num= MAX_CONNCETION_NUM ) ) )

for t in threads:
    t.start()
    
for t in threads:
    t.join()
pass


© 著作权归作者所有

共有 人打赏支持
junanhonglei
粉丝 8
博文 102
码字总数 39613
作品 0
鄂州
架构师
Netty系列之Netty高可靠性原理分析

背景 1.1. 宕机的代价 1.1.1. 电信行业 毕马威国际(KPMG International)在对46个国家的74家运营商进行调查后发现,全球通信行业每年的收益流失约为400亿美元,占总收入的1%-3%。导致收益流失...

tantexian ⋅ 2016/07/22 ⋅ 0

句柄泄漏调试经验

句柄泄漏检测-简单 在调试之前首先确定是不是真的发生了句柄泄漏,简单的检测方法是通过任务管理器来查看进程的句柄数是不是居高不下,任务管理器默认不显示句柄数,要查看进程的句柄数需要先...

nothingfinal ⋅ 2017/01/23 ⋅ 0

记一则罕见的hive字段值异常引起map阶段的OOM

前段时间遇到了一个很诡异的发生的Map阶段的OOM异常,花了些时间才找到原因,这个简要记录一下。 先看log。 节点一的TaskTracker的log: 节点二的TaskTracker的log: 节点三的TaskTracker的l...

zengzhaozheng ⋅ 2014/05/19 ⋅ 0

I/O多路复用详解—支持I/O复用的系统调用select

1、select函数 select系统调用是用来让我们的程序监视多个文件句柄(file descrīptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。 文件在...

安卓推送 ⋅ 2013/10/25 ⋅ 0

分析Tomcat类加载机制触发的Too many open files问题

  分析Tomcat类加载机制触发的Too many open files问题   Too many open files意思是打开文件太多了那么碰到Tomcat类加载机制触发的Too many open files问题要如何来处理,我们这边一起来...

时间财富网 ⋅ 2016/11/24 ⋅ 1

Making your C++ code robust

Cleaning Up Released Handles 在释放一个句柄之前,务必将这个句柄复制伪NULL (0或则其他默认值)。这样能够保证程序其他地方不会重复使用无效句柄。看看如下代码,如何清除一个Windows A...

开心303 ⋅ 2011/11/03 ⋅ 0

Swarm 如何实现 Failover?- 每天5分钟玩转 Docker 容器技术(98)

故障是在所难免的,容器可能崩溃,Docker Host 可能宕机,不过幸运的是,Swarm 已经内置了 failover 策略。 创建 service 的时候,我们没有告诉 swarm 发生故障时该如何处理,只是说明了我们...

CloudMan6 ⋅ 2017/11/27 ⋅ 0

ie 被呼叫方不可用并已消失

故障现象 在B/S Web系统中,管理员重复在同一台机器上登录功能,会导致脚本报错。具体表象为:Java Script Error 被呼叫方(服务器[不是服务器应用程序])不可用并已消失。所有连接均无效。没有...

低至一折起 ⋅ 2017/12/05 ⋅ 0

大型网站的高可用分析

本文主要分析网站的高可用性,从应用需求、用户角度展开分析。 1.1 高可用性 “高可用性”(High Availability) 通常用来描述一个系统,经过特殊设计,减少停止服务的时间,从而使其服务保持高...

solar.xie ⋅ 2015/11/06 ⋅ 0

常用BFD类型

BFD for PIS BFD for PIS(Process interface status)提供一种简单的机制,使得BFD检测行为可以关联接口状态,提高了接口感应链路故障的灵敏度,减少了非直连链路故障导致的问题。 BFD的PIS...

xingyun1113 ⋅ 2013/07/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部