def test_stderr_raising(self): if greentest.PYPY: # Does not work on PyPy return # testing that really egregious errors in the error handling code # (that prints tracebacks to stderr) don't cause the pool to lose # any members import sys pool = self.klass(size=1) # we're going to do this by causing the traceback.print_exc in # safe_apply to raise an exception and thus exit _main_loop normal_err = sys.stderr try: sys.stderr = FakeFile() waiter = pool.spawn(crash) with gevent.Timeout(2): self.assertRaises(RuntimeError, waiter.get) # the pool should have something free at this point since the # waiter returned # pool.Pool change: if an exception is raised during execution of a link, # the rest of the links are scheduled to be executed on the next hub iteration # this introduces a delay in updating pool.sem which makes pool.free_count() report 0 # therefore, sleep: gevent.sleep(0) self.assertEqual(pool.free_count(), 1) # shouldn't block when trying to get t = gevent.Timeout.start_new(0.1) try: pool.apply(gevent.sleep, (0, )) finally: t.cancel() finally: sys.stderr = normal_err pool.join()
def test_stderr_raising(self): # testing that really egregious errors in the error handling code # (that prints tracebacks to stderr) don't cause the pool to lose # any members import sys pool = self.klass(size=1) # we're going to do this by causing the traceback.print_exc in # safe_apply to raise an exception and thus exit _main_loop normal_err = sys.stderr try: sys.stderr = FakeFile() waiter = pool.spawn(crash) with gevent.Timeout(2): self.assertRaises(RuntimeError, waiter.get) # the pool should have something free at this point since the # waiter returned # pool.Pool change: if an exception is raised during execution of a link, # the rest of the links are scheduled to be executed on the next hub iteration # this introduces a delay in updating pool.sem which makes pool.free_count() report 0 # therefore, sleep: gevent.sleep(0) self.assertEqual(pool.free_count(), 1) # shouldn't block when trying to get with gevent.Timeout.start_new(0.1): pool.apply(gevent.sleep, (0, )) finally: sys.stderr = normal_err pool.join()
def dont_test_timer_cancel(self): timer_fired = [] def fire_timer(): timer_fired.append(True) def some_work(): gevent.timer(0, fire_timer) pool = self.klass(2) pool.apply(some_work) gevent.sleep(0) self.assertEquals(timer_fired, [])
def test_apply_raises(self): pool = self.klass(1) def raiser(): raise ExpectedException() try: pool.apply(raiser) except ExpectedException: pass else: self.fail("Should have raised ExpectedException")
def dont_test_timer_cancel(self): timer_fired = [] def fire_timer(): timer_fired.append(True) def some_work(): gevent.timer(0, fire_timer) pool = self.klass(2) pool.apply(some_work) gevent.sleep(0) self.assertEqual(timer_fired, [])
def test_reentrant(self): pool = self.klass(1) def reenter(): result = pool.apply(lambda a: a, ('reenter', )) self.assertEqual('reenter', result) pool.apply(reenter) evt = Event() def reenter_async(): pool.apply_async(lambda a: a, ('reenter', )) evt.set() pool.apply_async(reenter_async) evt.wait()
def test_reentrant(self): pool = self.klass(1) result = pool.apply(pool.apply, (lambda a: a + 1, (5, ))) self.assertEqual(result, 6) evt = Event() pool.apply_async(evt.set) evt.wait()
def test_apply(self): value = 'return value' def some_work(): return value pool = self.klass(2) result = pool.apply(some_work) self.assertEqual(value, result)
# target_tickets, # events_tried) if __name__ == '__main__': if SINGLE_DNS_LOOKUP: url = urlparse(ROOT_URL) ip = socket.gethostbyname(url.hostname) ROOT_URL = '{}://{}:{}{}'.format(url.scheme, ip, url.port, url.path) print('Connecting to {}'.format(ROOT_URL)) date_from, date_to = get_eventsdatesrange() print('Searching for events between {} and {}'.format(date_from, date_to)) if not CONTINUOUS: jobs = [gevent.spawn(main) for _ in range(COROUTINES)] gevent.joinall(jobs, timeout=10) print([job.value for job in jobs]) else: pool = gevent.pool.Pool(COROUTINES) def schedule(): while True: pool.wait_available() print('Starting greenlet') pool.apply_async(main) pool.apply(schedule) pool.join()
def reenter(): result = pool.apply(lambda a: a, ('reenter', )) self.assertEqual('reenter', result)