def add_task(self, f, *args, **kwargs):
        self._q.put((f, args, kwargs))

    def wait_complete(self):
        self._q.join()


pool = ThreadPool()

for _ in range(8):
    wt = random()
    pool.add_task(double, wt)
    time.sleep(wt)

pool.wait_complete()
"""
USE: Thread-202
0.3289221727443976
USE: Thread-203
1.941427406228165
USE: Thread-204
1.4668008298757944
USE: Thread-205
0.23496561121950066
USE: Thread-206
1.8221948868451534
USE: Thread-202
1.4666381815129967
USE: Thread-203
1.3545860243223637