python – asyncore超时

python – asyncore超时,第1张

概述简单的异步http客户端,很长时间没有可用的站点. 例如,在网站www.evtur.ru它等待很长时间,十分钟或更长时间. 我找不到如何最小化超时的方法,例如可以在5秒内执行超时吗? # coding=utf-8import asyncoreimport string, socketimport StringIOimport mimetools, urlparseclass Async 简单的异步http客户端,很长时间没有可用的站点.

例如,在网站www.evtur.ru它等待很长时间,十分钟或更长时间.

我找不到如何最小化超时的方法,例如可以在5秒内执行超时吗?

# Coding=utf-8import asyncoreimport string,socketimport StringIOimport mimetools,urlparseclass Asynchttp(asyncore.dispatcher):    # http requestor    def __init__(self,uri):        asyncore.dispatcher.__init__(self)        self.uri = uri        # turn the uri into a valID request        scheme,host,path,params,query,fragment = urlparse.urlparse(uri)        assert scheme == "http","only supports http requests"        try:            host,port = string.split(host,":",1)            port = int(port)        except (TypeError,ValueError):            port = 80 # default port        if not path:            path = "/"        if params:            path = path + ";" + params        if query:            path = path + "?" + query        self.request = "GET %s http/1.0\r\nHost: %s\r\n\r\n" % (path,host)        self.host = host        self.port = port        self.status = None        self.header = None        self.http_code = None        self.data = ""        # get things going!        self.create_socket(socket.AF_INET,socket.soCK_STREAM)        #self.connect((host,port))        #return        try:            self.connect((host,port))        except Exception,e:            self.close()            self.handle_connect_expt(e)    def handle_connect(self):        self.send(self.request)    def handle_expt(self):        print "handle_expt error!"        self.close()    def handle_error(self):        print "handle_error error!"        self.close()    def handle_connect_expt(self,expt):        print "connection error:",expt    def handle_code(self):                print self.host," : ","recv http code: ",self.http_code    def handle_read(self):        data = self.recv(2048)        #print data        if not self.header:            self.data = self.data + data            try:                i = string.index(self.data,"\r\n\r\n")            except ValueError:                return # continue            else:                # parse header                fp = StringIO.StringIO(self.data[:i+4])                # status line is "http/version status message"                status = fp.readline()                self.status = string.split(status," ",2)                self.http_code = self.status[1]                self.handle_code()                      # followed by a rfc822-style message header                self.header = mimetools.Message(fp)                # followed by a newline,and the payload (if any)                data = self.data[i+4:]                self.data = ""                #header recived                #self.close()    def handle_close(self):        self.close()c = Asynchttp('http://www.python.org')c = Asynchttp('http://www.evtur.ru')asyncore.loop(timeout=0.05)
解决方法
self.socket.settimeout(nn)

这似乎不适合我.

但是,asyncore.loop()具有名为count的参数.这里是伪代码asyncore.loop()在做什么:

for i in range(count):    ...    select(...,timeout)    ...

所以如果你想要5秒钟,你需要做:

asyncore.loop(timeout=1,count=5)

但不建议以这种方式工作.请注意,如果存在“事件”,则可能有超过5个“计数”.我使用以下代码:

start = int(time.time())while True:    asyncore.loop(timeout=1,count=5)    print "LOOP : %d enqueued,waiting to finish" % len(asyncore.socket_map)    if len(asyncore.socket_map) == 0 :        break    if int(time.time()) - start > timeout :        print "LOOP : Timeout"        break
总结

以上是内存溢出为你收集整理的python – asyncore超时全部内容,希望文章能够帮你解决python – asyncore超时所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址:https://54852.com/langs/1196552.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存