示例#1
0
 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
示例#2
0
 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)
示例#3
0
 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.
示例#4
0
 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())
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
    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
示例#8
0
 def worker():
     while True:
         item = yield q.get()
         self.accumulator += item
         q.task_done()
         yield gen.sleep(random() * 0.01)
示例#9
0
 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))
示例#10
0
 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")
示例#11
0
 def test_sleep(self):
     yield gen.sleep(0.01)
     self.finished = True
示例#12
0
 def server_task():
     yield server.write(b"1234")
     yield gen.sleep(0.01)
     yield server.write(b"5678")
     server.close()