Allow multiple workers on MacOS with Python 3.8. Fallback to single worker on Windows until pickling can be fixed. (#1798)

This commit is contained in:
L. Kärkkäinen 2020-03-01 21:41:10 +02:00 committed by GitHub
parent 16961fab9d
commit 7833d70d9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 3 deletions

View File

@ -1096,7 +1096,7 @@ class Sanic:
stop_event: Any = None, stop_event: Any = None,
register_sys_signals: bool = True, register_sys_signals: bool = True,
access_log: Optional[bool] = None, access_log: Optional[bool] = None,
**kwargs: Any **kwargs: Any,
) -> None: ) -> None:
"""Run the HTTP Server and listen until keyboard interrupt or term """Run the HTTP Server and listen until keyboard interrupt or term
signal. On termination, drain connections before closing. signal. On termination, drain connections before closing.
@ -1177,6 +1177,12 @@ class Sanic:
try: try:
self.is_running = True self.is_running = True
if workers > 1 and os.name != "posix":
logger.warn(
f"Multiprocessing is currently not supported on {os.name},"
" using workers=1 instead"
)
workers = 1
if workers == 1: if workers == 1:
if auto_reload and os.name != "posix": if auto_reload and os.name != "posix":
# This condition must be removed after implementing # This condition must be removed after implementing

View File

@ -1,4 +1,5 @@
import asyncio import asyncio
import multiprocessing
import os import os
import sys import sys
import traceback import traceback
@ -6,7 +7,6 @@ import traceback
from collections import deque from collections import deque
from functools import partial from functools import partial
from inspect import isawaitable from inspect import isawaitable
from multiprocessing import Process
from signal import SIG_IGN, SIGINT, SIGTERM, Signals from signal import SIG_IGN, SIGINT, SIGTERM, Signals
from signal import signal as signal_func from signal import signal as signal_func
from socket import SO_REUSEADDR, SOL_SOCKET, socket from socket import SO_REUSEADDR, SOL_SOCKET, socket
@ -1017,9 +1017,10 @@ def serve_multiple(server_settings, workers):
signal_func(SIGINT, lambda s, f: sig_handler(s, f)) signal_func(SIGINT, lambda s, f: sig_handler(s, f))
signal_func(SIGTERM, lambda s, f: sig_handler(s, f)) signal_func(SIGTERM, lambda s, f: sig_handler(s, f))
mp = multiprocessing.get_context("fork")
for _ in range(workers): for _ in range(workers):
process = Process(target=serve, kwargs=server_settings) process = mp.Process(target=serve, kwargs=server_settings)
process.daemon = True process.daemon = True
process.start() process.start()
processes.append(process) processes.append(process)