<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def do_health_checks(self, list_of_ips):
 """ Perform a health check on a list of IP addresses. Each check (we use a TCP connection attempt) is run in its own thread. Gather up the results and return the list of those addresses that failed the test and the list of questionable IPs. TODO: Currently, this starts a thread for every single address we want to check. That's probably not a good idea if we have thousands of addresses. Therefore, we should implement some batching for large sets. """

        threads = []
        results = []

        # Start the thread for each IP we wish to check.
        for count, ip in enumerate(list_of_ips):
            thread = threading.Thread(
                                target = self._do_tcp_check,
                                name   = "%s:%s" % (self.thread_name, ip),
                                args   = (ip, results))
            thread.start()
            threads.append(thread)

        # ... make sure all threads are done...
        for thread in threads:
            thread.join()

        # ... and send back all the failed IPs.
        return results, []