'Threads are created only when get_project is called, and terminate
before it returns. They are there primarily to parallelise I/O (i.e.
fetching web pages).'

def _prepare_threads(self):

    self._threads = []
    for i in range(self.num_workers):
        t = threading.Thread(target=self._fetch)
        t.setDaemon(True)
        t.start()
        self._threads.append(t)
