httplib, threading, wx app freezing after 4 hours

Mark rainess msrainess at comcast.net
Sat Jul 22 11:55:15 EDT 2006


The program displays images from a motion jpeg webcam.
(Motion jpeg is a bastardization of multi-part mime.)
<http://wp.netscape.com/assist/net_sites/pushpull.html>

It runs perfectly for about 4 hours, then freezes.
I'm stuck. How do I debug this?

(Using: Python 2.4.3, wxPython 2.6.3.2, Windows 2000 and XP)

There are no tracebacks, the gui continues to run,
isAlive() and activeCount() indicate that the thread is OK,
"print I'm alive" stops. CPU % usage is 0

I figure it is hanging in r.readline() or f.read()

Can anyone suggest techniques to help me learn what is going on.

I'm using httplib.HTTP instead of httplib.HTTPConnection because
I don't find that HTTPConnection has readline().


Mark Rainess


=========================================================
class mjpeg_get(threading.Thread):
     def run(self):
         while 1:
             while 1:
                 # print I'm connecting
                 h = httplib.HTTP(self.url)
                 h.putrequest('GET','VIDEO.CGI')
                 h.putheader('Accept','text/html')
                 h.endheaders()
                 if errcode == 200:
                     f = h.getfile()
                     break
                 # cleanup and try again

             s = cStringIO()
             while 1:
                 # print I'm alive
                 try:
                     # do f.readline() to get headers
                     # get count from 'Content-length:'
                     s.reset()
                     s.write(f.read(count))
                     s.truncate()
                     wx.CallAfter(self.window.onUpdateImg, s)
                     continue
                 except:
                     # print error
                     # cleanup and try again
                     break

class Frame(wx.Frame):
     def OnIdle(self, event):
         # for debugging display result of
         # Thread.isAlive()
         # threading.activeCount()
         if self.gotImage is True:
             # do display self.sImage
             self.gotImage = False
     def onUpdateImg(self, parm):
         if self.gotImage is False:
             self.sImage.reset()
             self.sImage.write(parm.getvalue())
             self.sImage.truncate()
             self.sImage.reset()
             self.gotImage = True
=========================================================



More information about the Python-list mailing list