def start_scan(self, period): self.stop_scan() event = Event() scan_thread = Thread(name="usb scan", target=self._background_scan, args=[period, event], daemon=True) scan_thread.event = event self.scan_thread = scan_thread scan_thread.start()
def test_multiple_threads(iterations=120, num_consumers=30): q = BlockingQueue(iterations) woken_thread_event = Event() threads = [] times = [] def _get(iters, ev): start = time() for _i in xrange(iters): q.get() ev.set() woken_thread_event.set() end = time() times.append(end-start) iters_per_consumer = iterations/num_consumers for _i in range(num_consumers): ev = Event() tc = Thread(target=_get, args=(iters_per_consumer, ev)) tc.setDaemon(1) tc.event = ev threads.append(tc) for t in threads: t.start() assert not times for i in xrange(iterations): q.put(i) woken_thread_event.wait(1) woken_thread_event.clear() woken_threads = [t for t in threads if t.event.isSet()] assert len(woken_threads) == 1, woken_threads woken_threads[0].event.clear() for t in threads: t.join(1) assert not t.isAlive() assert len(times) == len(threads)