def __init__(self, url_table, processor, statistics, concurrent=1): self._url_table = url_table self._processor = processor self._statistics = statistics self._worker_semaphore = AdjustableSemaphore(concurrent) self._done_event = toro.Event() self._num_worker_busy = 0 self._exit_code = 0 self._stopping = False self.stop_event = wpull.actor.Event()
def test_adjustable_semaphore(self): semaphore = AdjustableSemaphore(value=2) yield semaphore.acquire( deadline=datetime.timedelta(seconds=0.1)) # value = 1 yield semaphore.acquire( deadline=datetime.timedelta(seconds=0.1)) # value = 2 try: yield semaphore.acquire(deadline=datetime.timedelta(seconds=0.1)) except toro.Timeout: pass else: self.fail() semaphore.set_max(3) self.assertEqual(3, semaphore.max) yield semaphore.acquire( deadline=datetime.timedelta(seconds=0.1)) # value = 3 try: yield semaphore.acquire(deadline=datetime.timedelta(seconds=0.1)) except toro.Timeout: pass else: self.fail() semaphore.set_max(1) self.assertEqual(1, semaphore.max) try: yield semaphore.acquire(deadline=datetime.timedelta(seconds=0.1)) except toro.Timeout: pass else: self.fail() semaphore.release() # value = 2 try: yield semaphore.acquire(deadline=datetime.timedelta(seconds=0.1)) except toro.Timeout: pass else: self.fail() semaphore.release() # value = 1 try: yield semaphore.acquire(deadline=datetime.timedelta(seconds=0.1)) except toro.Timeout: pass else: self.fail() semaphore.release() # value = 0 yield semaphore.acquire(deadline=datetime.timedelta(seconds=0.1)) semaphore.release() self.assertRaises(ValueError, semaphore.release) def set_neg_max(): semaphore.set_max(-1) self.assertRaises(ValueError, set_neg_max)