示例#1
0
文件: monitor.py 项目: aisolab/faust
    async def _sampler(self) -> None:
        median = statistics.median
        prev_message_total = self.messages_received_total
        prev_event_total = self.events_total

        await self.sleep(1.0)
        for sleep_time in timer_intervals(1.0, name='Monitor.sampler'):
            if self.should_stop:
                break

            # Update average event runtime.
            if self.events_runtime:
                self.events_runtime_avg = median(self.events_runtime)

            # Update events/s
            self.events_s, prev_event_total = (
                self.events_total - prev_event_total,
                self.events_total,
            )

            # Update messages/s
            self.messages_s, prev_message_total = (
                self.messages_received_total - prev_message_total,
                self.messages_received_total)

            # Cleanup
            self._cleanup()

            await self.sleep(sleep_time)
            if self.should_stop:
                break
示例#2
0
async def test_timer_intervals():
    i = 0
    for sleep_time in timer_intervals(0.1):
        assert sleep_time == pytest.approx(0.1, 2e-1)
        await asyncio.sleep(sleep_time)
        if i > 10:
            break
        i += 1
示例#3
0
 async def _wrapped(*args, **kwargs):
     await self.sleep(interval)
     for sleep_time in timer_intervals(interval,
                                       name=timer_name,
                                       max_drift_correction=0.1):
         if self.should_stop:
             break
         await func(*args, **kwargs)
         await self.sleep(sleep_time)
         if self.should_stop:
             break
示例#4
0
文件: base.py 项目: aisolab/faust
 async def _clean_data(self) -> None:
     interval = self.app.conf.table_cleanup_interval
     if self._should_expire_keys():
         await self.sleep(interval)
         for sleep_time in timer_intervals(interval, name='table_cleanup'):
             if self.should_stop:
                 break
             self._del_old_keys()
             await self.sleep(sleep_time)
             if self.should_stop:
                 break
示例#5
0
文件: consumer.py 项目: aisolab/faust
    async def _commit_handler(self) -> None:
        interval = self.commit_interval

        await self.sleep(interval)
        for sleep_time in timer_intervals(interval, name='commit'):
            if self.should_stop:
                break
            await self.commit()
            await self.sleep(sleep_time)
            if self.should_stop:
                break
示例#6
0
 async def _publish_stats(self) -> None:
     interval = self.stats_interval
     await self.sleep(interval)
     for sleep_time in timer_intervals(interval, name='Recovery.stats'):
         if self.should_stop:
             break
         if self.in_recovery:
             stats = self.active_stats()
             if stats:
                 self.log.info('Still fetching. Remaining: %s', stats)
         await self.sleep(sleep_time)
         if self.should_stop:
             break
示例#7
0
async def test_timer_intervals__too_early():
    clock = Mock()
    clock.return_value = 9.0
    clock_values = iter([
        10.0, 11.0, 12.0, 13.0, 13.1, 14.1, 15.0, 16.0, 17.0])
    #                          ^- too fast
    with patch('mode.timers.logger') as logger:
        i = 0
        for sleep_time in timer_intervals(1.0, clock=clock):
            clock.return_value = next(clock_values)
            assert sleep_time == (1.1 if i == 5 else 1.0)
            if i >= 6:
                break
            i += 1
        logger.info.assert_called_once()
示例#8
0
async def test_timer_intervals__too_late():
    clock = Mock()
    clock.return_value = 9.0
    clock_values = iter([
        10.0, 11.0, 12.0, 13.0, 16.0, 17.0, 18.0, 19.0, 20.0])
    #                          ^- skips
    with patch('mode.timers.logger') as logger:
        i = 0
        for sleep_time in timer_intervals(1.0, clock=clock):
            clock.return_value = next(clock_values)
            assert sleep_time == (0.9 if i == 5 else 1.0)
            if i >= 8:
                break
            i += 1
        logger.info.assert_called_once()
示例#9
0
文件: consumer.py 项目: aisolab/faust
 async def _commit_livelock_detector(self) -> None:  # pragma: no cover
     soft_timeout = self.commit_livelock_soft_timeout
     interval: float = self.commit_interval * 2.5
     await self.sleep(interval)
     for sleep_time in timer_intervals(interval, name='livelock'):
         if self.should_stop:
             break
         if self._last_batch is not None:
             s_since_batch = monotonic() - self._last_batch
             if s_since_batch > soft_timeout:
                 self.log.warning(
                     'Possible livelock: COMMIT OFFSET NOT ADVANCING')
         await self.sleep(sleep_time)
         if self.should_stop:
             break