From 9f8b40854181a6b1e7ede5c2271075ddc881d234 Mon Sep 17 00:00:00 2001 From: David Dai Date: Mon, 12 Aug 2024 17:42:59 +0800 Subject: [PATCH] Increase the poll interval to reduce CPU consumption --- mmpy_bot/event_handler.py | 3 +-- mmpy_bot/threadpool.py | 2 +- mmpy_bot/webhook_server.py | 3 +-- tests/unit_tests/webhook_server_test.py | 8 ++++---- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/mmpy_bot/event_handler.py b/mmpy_bot/event_handler.py index e719932c..da75177b 100644 --- a/mmpy_bot/event_handler.py +++ b/mmpy_bot/event_handler.py @@ -48,8 +48,7 @@ async def _check_queue_loop(self, webhook_queue: queue.Queue): event = webhook_queue.get_nowait() await self._handle_webhook(event) except queue.Empty: - pass - await asyncio.sleep(0.0001) + await asyncio.sleep(0.5) async def _handle_event(self, data): post = json.loads(data) diff --git a/mmpy_bot/threadpool.py b/mmpy_bot/threadpool.py index a2d275b0..8e710731 100644 --- a/mmpy_bot/threadpool.py +++ b/mmpy_bot/threadpool.py @@ -93,7 +93,7 @@ async def start_server(): await webhook_server.start() while self.alive: # We just use this to keep the loop running in a non-blocking way - await asyncio.sleep(0.001) + await asyncio.sleep(1) await webhook_server.stop() log.info("Webhook server thread stopped.") diff --git a/mmpy_bot/webhook_server.py b/mmpy_bot/webhook_server.py index 6963b54a..40a2249b 100644 --- a/mmpy_bot/webhook_server.py +++ b/mmpy_bot/webhook_server.py @@ -81,8 +81,7 @@ async def _obtain_responses_loop(self): # If this handler already received a response, we can skip this. pass except Empty: - pass - await asyncio.sleep(0.0001) + await asyncio.sleep(0.5) @handle_json_error async def process_webhook(self, request: web.Request): diff --git a/tests/unit_tests/webhook_server_test.py b/tests/unit_tests/webhook_server_test.py index 34a704c3..1230fc70 100644 --- a/tests/unit_tests/webhook_server_test.py +++ b/tests/unit_tests/webhook_server_test.py @@ -24,7 +24,7 @@ def test_start(self, threadpool): server = WebHookServer(port=3281, url=Settings().WEBHOOK_HOST_URL) threadpool.start_webhook_server_thread(server) threadpool.start() - time.sleep(0.5) + time.sleep(1) assert server.running asyncio.set_event_loop(asyncio.new_event_loop()) @@ -48,13 +48,13 @@ def test_obtain_response(self, server): # We have no futures waiting for request id 'nonexistent', so nothing should # happen. server.response_queue.put(("nonexistent", None)) - time.sleep(0.1) + time.sleep(1) assert not server.response_handlers["test"].done() # If a response comes in for request id 'test', it should be removed from the # response handlers dict. server.response_queue.put(("test", None)) - time.sleep(0.1) + time.sleep(1) assert "test" not in server.response_handlers @pytest.mark.skip("Called from test_start since we can't parallellize this.") @@ -86,7 +86,7 @@ async def send_request(data): # Since there is no MessageHandler, we have to signal the server ourselves server.response_queue.put((event.request_id, NoResponse)) - time.sleep(0.1) + time.sleep(1) # Upon receiving the NoResponse, the server should have emptied the response # queue and handlers. assert server.response_queue.empty()