is there any bug in this multi-thread script?

J

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)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,074
Latest member
StanleyFra

Latest Threads

Top