import multiprocessing from itertools import count import threading class _Worker(multiprocessing.Process): def __init__(self, queue: multiprocessing.Queue): super().__init__(daemon=True) self.running = multiprocessing.Event() self.queue = queue def run(self): print(f"{self.name} started.", flush=True) self.running.set() self.queue.get() def fill(queue): while True: queue.put(None) print("fill put object to queue") # <- This is the offending statement def test_problem(): q = multiprocessing.Queue(4) filler = threading.Thread(target=fill, args=(q,), daemon=True) filler.start() print("start method:", multiprocessing.get_start_method()) for i in range(1000): w = _Worker(q) w.start() if not w.running.wait(2): raise Exception(f"{i}: {w.name} did not enter running state.") if __name__ == "__main__": test_problem()