| 123456789101112131415161718192021222324252627282930313233343536 | 
							- import queue
 - import threading
 - 
 - from django.db import connection
 - 
 - 
 - def run_concurrently(fn, kwargs=None, num_threads=5):
 -     exceptions = queue.Queue()
 - 
 -     def worker(**kwargs):
 -         try:
 -             fn(**kwargs)
 -         except Exception as exc:
 -             exceptions.put(exc)
 -         else:
 -             exceptions.put(None)
 -         finally:
 -             connection.close()
 - 
 -     kwargs = kwargs if kwargs is not None else {}
 - 
 -     # Run them
 -     threads = [
 -         threading.Thread(target=worker, name='thread-%d' % i, kwargs=kwargs)
 -         for i in range(num_threads)
 -     ]
 -     try:
 -         for thread in threads:
 -             thread.start()
 -     finally:
 -         for thread in threads:
 -             thread.join()
 - 
 -     # Retrieve exceptions
 -     exceptions = [exceptions.get(block=False) for i in range(num_threads)]
 -     return [exc for exc in exceptions if exc is not None]
 
 
  |