Skip to content

Commit

Permalink
[Fix] server: support for running outside of the main thread
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastien committed Oct 20, 2024
1 parent 30afbc4 commit 2348220
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions src/py/extra/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from dataclasses import dataclass
import socket
import asyncio
import threading
from .utils.logging import exception, info, warning, event
from .utils.codec import BytesTransform
from .utils.limits import LimitType, unlimit
Expand Down Expand Up @@ -53,6 +54,7 @@ class ServerOptions(NamedTuple):
keepalive: float = 3_600
logRequests: bool = True
condition: Callable[[], bool] | None = None
stopSignals: bool = True


OPTIONS: ServerOptions = ServerOptions()
Expand Down Expand Up @@ -371,9 +373,15 @@ async def Serve(

# Manage server state
state = ServerState()
# Registers handlers for signals and exception (so that we log them)
loop.add_signal_handler(SIGINT, lambda: state.stop())
loop.add_signal_handler(SIGTERM, lambda: state.stop())
# Registers handlers for signals and exception (so that we log them). Note
# that we'll get a `set_wakeup_fd only works in main thread of the main interpreter`
# when this is not run out of the main thread.
if (
options.stopSignals
and threading.current_thread() is threading.main_thread()
):
loop.add_signal_handler(SIGINT, lambda: state.stop())
loop.add_signal_handler(SIGTERM, lambda: state.stop())
loop.set_exception_handler(state.onException)

info(
Expand Down

0 comments on commit 2348220

Please sign in to comment.