import threading import time def gen(): while True: yield 3 def loop_on_func(): g = gen() next(g) while True: g.send(1) workers = [] for _ in range(4): worker = threading.Thread(target=loop_on_func) worker.daemon = True workers.append(worker) for worker in workers: worker.start() time.sleep(0.1) # for worker in workers: worker.join()