Clients: fix high CPU usage when launched via MultiProcessing (#4209)
* Core: make Utils.stream_input not consume all CPU for non-blocking streams * Clients: ignore MultiProcessing pipe as input console
This commit is contained in:
parent
01c6037562
commit
3ae8992fb6
|
@ -710,6 +710,11 @@ class CommonContext:
|
||||||
|
|
||||||
def run_cli(self):
|
def run_cli(self):
|
||||||
if sys.stdin:
|
if sys.stdin:
|
||||||
|
if sys.stdin.fileno() != 0:
|
||||||
|
from multiprocessing import parent_process
|
||||||
|
if parent_process():
|
||||||
|
return # ignore MultiProcessing pipe
|
||||||
|
|
||||||
# steam overlay breaks when starting console_loop
|
# steam overlay breaks when starting console_loop
|
||||||
if 'gameoverlayrenderer' in os.environ.get('LD_PRELOAD', ''):
|
if 'gameoverlayrenderer' in os.environ.get('LD_PRELOAD', ''):
|
||||||
logger.info("Skipping terminal input, due to conflicting Steam Overlay detected. Please use GUI only.")
|
logger.info("Skipping terminal input, due to conflicting Steam Overlay detected. Please use GUI only.")
|
||||||
|
|
3
Utils.py
3
Utils.py
|
@ -18,6 +18,7 @@ import warnings
|
||||||
|
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
from settings import Settings, get_settings
|
from settings import Settings, get_settings
|
||||||
|
from time import sleep
|
||||||
from typing import BinaryIO, Coroutine, Optional, Set, Dict, Any, Union
|
from typing import BinaryIO, Coroutine, Optional, Set, Dict, Any, Union
|
||||||
from typing_extensions import TypeGuard
|
from typing_extensions import TypeGuard
|
||||||
from yaml import load, load_all, dump
|
from yaml import load, load_all, dump
|
||||||
|
@ -568,6 +569,8 @@ def stream_input(stream: typing.TextIO, queue: "asyncio.Queue[str]"):
|
||||||
else:
|
else:
|
||||||
if text:
|
if text:
|
||||||
queue.put_nowait(text)
|
queue.put_nowait(text)
|
||||||
|
else:
|
||||||
|
sleep(0.01) # non-blocking stream
|
||||||
|
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
thread = Thread(target=queuer, name=f"Stream handler for {stream.name}", daemon=True)
|
thread = Thread(target=queuer, name=f"Stream handler for {stream.name}", daemon=True)
|
||||||
|
|
Loading…
Reference in New Issue