关闭线程时出现Python问题

2024-09-28 05:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用urllib2监视一个web套接字。我有以下类处理连接到站点并接收响应:

class Stream(Thread):

    def __init__(self, connectCallback=None, **kwargs):
        self.connectCallback = connectCallback
        Thread.__init__(self)

    def run(self):
        self.running = True

        while self.running:
            try:
                req = urllib2.Request(url, headers=self.headers)
                req.add_data(self.body)
                print "Stream connecting %s" % self
                self.connectCallback(self)
                f = urllib2.urlopen(req)
                print "Stream connected %s" % self
                while 1:
                    if self.running:
                        print "data receiving"
                    else:
                        f.close()
                        break
                retry_time = self.retry_time
            except (urllib2.URLError, urllib2.HTTPError), e:
                print 'Exception: %s, retry in %f' % (e, retry_time)
                time.sleep(retry_time)
                retry_time *= 4.0
                if retry_time > self.max_retry:
                    retry_time = self.max_retry
            except Exception as err:
                print 'Exception: %s' % err

        print "Stream closed %s" % self

    def disconnect(self):
        print 'Disconnecting stream %s ' % self
        if self.running is False:
            return
        self.running = False
        self.join()

我希望能够异步运行流类的多个实例。下面是我的主类,它实例化了流:

^{pr2}$

当我只有一个stream对象,并且脚本干净地关闭时,这非常有效。但是,当我调用onTrackChange()方法并建立多个连接时,线程永远不会关闭,运行循环似乎也不会结束。在

我确定我遗漏了一些显而易见的东西,但是为什么我不能关闭流对象呢?在


Tags: selfstreamiftimeinitdefexceptionurllib2
1条回答
网友
1楼 · 发布于 2024-09-28 05:23:45

我相信您不会断开onStreamConnect中的第一个生产者,因为它是从_open_stream调用的。此时,self.new_producer尚未分配,并且在添加下一个流之前不会调用断开连接。在调试器中尝试此操作,或添加更多打印输出以验证这一点。在

相关问题 更多 >

    热门问题