I have this python script that just starts up threads to listen on some ports on the localhost. #!/usr/bin/python3 import socket import threading import concurrent.futures threads = [] def listen_on_port(port): HOST = '' # Symbolic name meaning all available interfaces PORT = int(port) # Arbitrary non-privileged port with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen(1) conn, addr = s.accept() print(addr,conn) def main(ports): with concurrent.futures.ThreadPoolExecutor() as executor: for port in ports: executor.submit(listen_on_port,port) if __name__ == '__main__': main(ports=[50010,50020,50030]) When I run this script it listens on the ports as expected. I use this script to test that the firewall rules are allowing connections on those ports. And on another system I execute nc -zv my-host 50010 and the thread is listening on port 50010 terminates, which is what I want. But, I would like to make two improvements: 1) have the threads die after X seconds, 2) Run the threads in the back ground like daemons so that my script will exit and leave the threads running. I have been trying to figure this out for days and I have gotten no where. Please help! Continue reading...