Added exception handling and getting closer to closing all the threads.
When threads invoke open_url with a bad URL that it hangs at  thread.join()