"Jay donnell" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > I have a short multi-threaded script that checks web images to make > sure they are still there. I get a segmentation fault everytime I run > it and I can't figure out why. Writing threaded scripts is new to me so > I may be doing something wrong that should be obvious :( > <snip>
Here is a code excerpt from your link (the main routine, omits the class definition for ImageChecker, which extends threading.Thread): db = MySQLdb.connect(host="localhost", user="xxx", passwd="xxx", db="xxx") cursor = db.cursor() query = "select * from item order by rand() limit 0, 100" #query = "select * from item" cursor.execute(query) result = cursor.fetchall() maxThreads = 5 for r in result: while(threading.activeCount() > maxThreads): pass flag='good' #pass #print str(r[0]) + ', ' + str(r[7]) tmp = r[7].split('/') filename = tmp[-1] #print 'filename ' + filename filename = '/tmp/'+filename threadList = [] #r[7] is the url of the image #r[0] is the id for the row imageChecker = ImageChecker(r[7], filename, r[0]) imageChecker.start() threadList.append(imageChecker) ---------------------------------------------- 1. What happens after you fall out of the loop "for r in result"? Shouldn't you wait for the remaining threads to finish? Perhaps you need another busy-loop to wait for the threads to finish, something like while threading.activeCount() > 0: pass 2. Is this the best way to busy-wait? What about some kind of thread.join()? At least throw a sleep call in there or something, or this loop will churn and churn, diverting CPU from your threads that are actually trying to do some real work. 3. I find it easier to work with named variables than numeric subscripts. At the top of your for loop, try something like: id,height,width,numBytes,whatever,slkdjf1,slkdjf2,url = r This way you have much more meaningful names than r[0] and r[7], which you later have to comment to explain whats going on! 4. filename=r[7].split('/')[-1] is not terribly portable. See if there is a standard module for parsing filespecs (I'll bet there is). -- Paul -- http://mail.python.org/mailman/listinfo/python-list