瀏覽代碼

Fix CPU load of dockerapi container

Previously the handle_pubsub_messages() loop was executing every 10ms
when there was no message available. Now reading from the redis network
socket will block (the coroutine) for up to 30s before it returns when
no message is available.

Using channel.listen() would be even better, but it lacks the
ignore_subscribe_messages option and I could not figure out how to
filter the returned messages.
Michael Stilkerich 2 年之前
父節點
當前提交
533bd36572
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      data/Dockerfiles/dockerapi/main.py

+ 2 - 2
data/Dockerfiles/dockerapi/main.py

@@ -198,8 +198,8 @@ async def handle_pubsub_messages(channel: aioredis.client.PubSub):
 
 
   while True:
   while True:
     try:
     try:
-      async with async_timeout.timeout(1):
-        message = await channel.get_message(ignore_subscribe_messages=True)
+      async with async_timeout.timeout(60):
+        message = await channel.get_message(ignore_subscribe_messages=True, timeout=30)
         if message is not None:
         if message is not None:
           # Parse message
           # Parse message
           data_json = json.loads(message['data'].decode('utf-8'))
           data_json = json.loads(message['data'].decode('utf-8'))