2012-08-14 3 views
4

pycurl 지속 연결에서 연결 끊김 여부는 어디에서 확인해야합니까?연결 해제 지속성 컬 연결

내 스크립트의 어느 부분에서 연결이 끊어 지거나 시간이 초과되었거나 오류가 발생했지만 스크립트는 계속 열려 있습니다. 스크립트를 다시 시작할 수 있도록 문제를 감지해야합니다.

우리는 (소셜 미디어 데이터 공급자)

내 코드가 여기에있다 gnip에 연결되어 내가 libcurl에 대한 옵션을 통해 읽고 한 https://gist.github.com/3353033

내가 PHP를 curl_setopts의 문서를 읽어 또한 때문에 libcurl을 활용하십시오.

class Client: 
    time_start = time.time() 
    content = "" 
    def __init__(self,options): 
     self.options = options 
     self.buffer = "" 
     self.conn = pycurl.Curl() 
     self.conn.setopt(pycurl.USERPWD, "%s:%s" % (USER, PASS)) 
     self.conn.setopt(pycurl.ENCODING,'gzip') 
     self.conn.setopt(pycurl.URL, STREAM_URL) 
     self.conn.setopt(pycurl.WRITEFUNCTION, self.on_receive) 
     self.conn.setopt(pycurl.FOLLOWLOCATION,1) 
     self.conn.setopt(pycurl.MAXREDIRS, 5) 
     self.conn.setopt(pycurl.COOKIEFILE,"cookie.txt") 
     try: 
      self.conn.perform() 
     except Exception,e: 
      print e.message 

    def on_receive(self, data): 
     self.buffer += data 

     if data.endswith("\r\n") and self.buffer.strip(): 
      if(self.triggered()): 
       if(len(self.buffer) != 0): 
        try: 
         SaveThread(self.buffer).start() 
        except Exception, e: 
         print "something i commented would have told you there was an error" 
         system.exit(1) 
       self.buffer = "" 

    def triggered(self): 
     # First trigger based on size then based on time.. 
     if (len(self.buffer) > SAVE_FILE_LENGTH): 
      return True 
     time_end = time.time() 
     if (((time_end - self.time_start) > ROLL_DURATION)): #for the time frame 
      self.time_start=time.time() 
      return True 
     return False 

편집 : 나는 sys.exit(1) 바로해야 위의 코드 system.exit(1)에서 요점

+0

요점이 올바로 들여 쓰기되어 있지 않습니다. 나는 또한 여기에 소스를 게시하는 것이 좋습니다. – stderr

+0

@MikeSteder 나는 그 요지를 고쳤다 고 믿고 여기서 그것을 복사했다. 감사! – Jake

답변

0

을 고정했다?

이외의 문자 exceptSystemExit 예외가 발생했을 가능성이있는 항목은 sys.exit(1)입니까?

+0

나는 현재 스크립트를보고 있지는 않지만 그게 문제가 아니라고 확신한다. 우리는 실제로 해결책을 찾아 내고 다음 날에 대답으로 게시 할 계획입니다. 문제의 요지는 네트워크 연결 문제가 문제라는 것입니다. 줄이 떨어지면 공급자는 여전히 파이프를 통해 데이터를 보내야한다고 생각하고 버퍼 쓰기 오류에서 끝나면 연결이 끊어집니다. 우리는 빈 버퍼에서 읽는 중이고 연결이 죽었다는 것을 모릅니다. . 이를 극복하고 낮은 데이터를 차단하기 위해 두 가지의 낮은 데이터 속도/시간 초과 옵션을 사용했습니다. – Jake

+0

안녕하세요, 우리는 Gnip과 비슷한 문제가 있습니다. 솔루션에 대해 자세히 설명해 주시겠습니까? 우리의 코드는 당신과 매우 비슷하게 보입니다. 어떻게 낮은 데이터 속도를 감지합니까? –

+0

@DeepKapadia가 LOW_SPEED_LIMIT 및 LOW_SPEED_TIME 옵션을 설정하면 네트워크 트래픽이 이러한 제한값 이하로 떨어질 때 오류 (28)가 발생합니다. (http://curl.haxx.se/libcurl/c/CURLOPT_LOW_SPEED_LIMIT.html 참조) – nickmilon