Exemple #1
0
 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)