Re: is there any bug in this multi-thread script?

2006-04-05 Thread Ju Hui
up...

-- 
http://mail.python.org/mailman/listinfo/python-list


is there any bug in this multi-thread script?

2006-04-05 Thread Ju Hui
I wrote a script to do work with multi-thread in a queue reference
others code.
Is there any bug in this script?
another question is : when we call start to run one thread extends from
threading, it will call a join() by itself? I want to monitor the
qsize() to ensure all work are finished. but when I commented the
#code start
while q.qsize()>0:
time.sleep(0.1)
#code end
it works well too.
any response is welcome.
Thanks a lot.

#code start

#!/usr/bin/env python
import Queue
import threading
import time
import random

q=Queue.Queue(0)
NUM_WORKERS = 3

class MyThread(threading.Thread):
"""A worker thread."""
def __init__(self, input, worktype):
self._jobq = input
self._work_type = worktype
threading.Thread.__init__(self)
def run(self):
"""
Get a job and process it. Stop when there's no more jobs
"""
while True:
if self._jobq.qsize()>0:
job = self._jobq.get()
worktype=self._work_type
self._process_job(job,worktype)
else:
break
def _process_job(self, job,worktype):
"""
Do useful work here.
worktype: let this thread do different work
1,do list
2,do item
3,,,
"""
doJob(job)

def doJob(job):
"""
do work function 1
"""
time.sleep(random.random()*3)
print "doing ",job
if __name__=='__main__':

print "begin..."
#put some work to q
for i in range(NUM_WORKERS*2):
q.put(i)
#print total job q's size
print "job q'size",q.qsize()
#start threads to work
for x in range(NUM_WORKERS):
MyThread(q,x).start()
#if q is not empty, wait
#while q.qsize()>0:
#time.sleep(0.1)

-- 
http://mail.python.org/mailman/listinfo/python-list