Limit number of concurrent threads

Martin v. Loewis martin at v.loewis.de
Tue Sep 24 14:52:47 EDT 2002


Chuck May <cmay4 at yahoo.com> writes:

> I've searching for examples that fit my problem, and I haven't found 
> any.  Most examples I've found look something like this:
> 
>     threads = []
>     for i in range(number_of_tasks):
>         thread.append(thread_for_task)
>     
>     # let the threads run - just wait for shutdown
>     for t in threads:
>         t.join() 
> 
> which whould work fine if I wanted to start all 80 threads at once.
> 
> I've read about the Queue, but I'm not sure if it's what I want, and I 
> can't seem to find any good examples on it.

I would recommend to use a thread pool: create a fixed number of
threads, and have them chose tasks from a task list.

# add all jobs to the queue
q = Queue.Queue()
for j in jobs:
  q.put(j)

def process_jobs():
 while 1:
  try:
    j = q.get(block = 0)
  except Queue.Empty:
    return
  run_job(j)

# create all worker threads
threads = []
for i in range(number_of_worker_threads):
   threading.Thread(target = process_jobs)

# join all completed threads
for t in threads:t.join()

HTH,
Martin



More information about the Python-list mailing list