def fire_master_started_event(self): log.info("Firing salt-%s started event...", self.opts["__role"]) start_event_tag = "salt/{}/{}/start".format( self.opts["__role"], self.opts["id"] ) log.info( "Firing salt-%s started event. Tag: %s", self.opts["__role"], start_event_tag, ) load = {"id": self.opts["id"], "tag": start_event_tag, "data": {}} # One minute should be more than enough to fire these events every second in order # for pytest-salt to pickup that the master is running with salt.utils.event.get_master_event( self.opts, self.opts["sock_dir"], listen=False ) as event_bus: timeout = 30 while True: if self.stop_sending_events_file and not os.path.exists( self.stop_sending_events_file ): log.info( 'The stop sending events file "marker" is done. Stop sending events...' ) break timeout -= 1 try: event_bus.fire_event(load, start_event_tag, timeout=500) if timeout <= 0: break yield gen.sleep(1) except iostream.StreamClosedError: break
def on_message(self, message): if self.sleeping > 0: self.write_message('another coroutine is already sleeping') self.sleeping += 1 yield gen.sleep(0.01) self.sleeping -= 1 self.write_message(message)
def test_put_timeout_preempted(self): q = queues.Queue(1) q.put_nowait(0) put = q.put(1, timeout=timedelta(seconds=0.01)) q.get() yield gen.sleep(0.02) yield put # No TimeoutError.
def test_no_ref(self): # In this usage, there is no direct hard reference to the # WaitIterator itself, only the Future it returns. Since # WaitIterator uses weak references internally to improve GC # performance, this used to cause problems. yield gen.with_timeout(datetime.timedelta(seconds=0.1), gen.WaitIterator(gen.sleep(0)).next())
def test_get_clears_timed_out_getters(self): q = queues.Queue() getters = [q.get(timedelta(seconds=0.01)) for _ in range(10)] get = q.get() self.assertEqual(11, len(q._getters)) yield gen.sleep(0.02) self.assertEqual(11, len(q._getters)) self.assertFalse(get.done()) # Final waiter is still active. q.get() # get() clears the waiters. self.assertEqual(2, len(q._getters)) for getter in getters: self.assertRaises(TimeoutError, getter.result)
def test_put_clears_timed_out_putters(self): q = queues.Queue(1) # First putter succeeds, remainder block. putters = [q.put(i, timedelta(seconds=0.01)) for i in range(10)] put = q.put(10) self.assertEqual(10, len(q._putters)) yield gen.sleep(0.02) self.assertEqual(10, len(q._putters)) self.assertFalse(put.done()) # Final waiter is still active. q.put(11) # put() clears the waiters. self.assertEqual(2, len(q._putters)) for putter in putters[1:]: self.assertRaises(TimeoutError, putter.result)
def run(self, asynchronous=False): """ Load and start all available api modules """ log.debug("Process Manager starting!") if multiprocessing.current_process().name != "MainProcess": appendproctitle(self.name) # make sure to kill the subprocesses if the parent is killed if signal.getsignal(signal.SIGTERM) is signal.SIG_DFL: # There are no SIGTERM handlers installed, install ours signal.signal(signal.SIGTERM, self._handle_signals) if signal.getsignal(signal.SIGINT) is signal.SIG_DFL: # There are no SIGINT handlers installed, install ours signal.signal(signal.SIGINT, self._handle_signals) while True: log.trace("Process manager iteration") try: # in case someone died while we were waiting... self.check_children() # The event-based subprocesses management code was removed from here # because os.wait() conflicts with the subprocesses management logic # implemented in `multiprocessing` package. See #35480 for details. if asynchronous: yield gen.sleep(10) else: time.sleep(10) if not self._process_map: break # OSError is raised if a signal handler is called (SIGTERM) during os.wait except OSError: break except OSError as exc: # pylint: disable=duplicate-except # IOError with errno of EINTR (4) may be raised # when using time.sleep() on Windows. if exc.errno != errno.EINTR: raise break
def worker(): while True: item = yield q.get() self.accumulator += item q.task_done() yield gen.sleep(random() * 0.01)
def test_get_timeout_preempted(self): q = queues.Queue() get = q.get(timeout=timedelta(seconds=0.01)) q.put(0) yield gen.sleep(0.02) self.assertEqual(0, (yield get))
def get(self): self.write("asdf") self.flush() # Wait a bit to ensure the chunks are sent and received separately. yield gen.sleep(0.01) self.write("qwer")
def test_sleep(self): yield gen.sleep(0.01) self.finished = True
def server_task(): yield server.write(b"1234") yield gen.sleep(0.01) yield server.write(b"5678") server.close()