mirror of
https://github.com/django/daphne.git
synced 2025-07-14 18:02:17 +03:00
Add staticfiles support and launch multiple serving workers
This commit is contained in:
parent
247a26b91a
commit
93d1aa9b74
|
@ -9,7 +9,9 @@ from django.utils import six
|
||||||
from django.utils.encoding import get_system_encoding
|
from django.utils.encoding import get_system_encoding
|
||||||
|
|
||||||
from channels import DEFAULT_CHANNEL_LAYER, channel_layers
|
from channels import DEFAULT_CHANNEL_LAYER, channel_layers
|
||||||
|
from channels.handler import ViewConsumer
|
||||||
from channels.log import setup_logger
|
from channels.log import setup_logger
|
||||||
|
from channels.staticfiles import StaticFilesConsumer
|
||||||
from channels.worker import Worker
|
from channels.worker import Worker
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,7 +35,9 @@ class Command(RunserverCommand):
|
||||||
return RunserverCommand.inner_run(self, *args, **options)
|
return RunserverCommand.inner_run(self, *args, **options)
|
||||||
# Check a handler is registered for http reqs; if not, add default one
|
# Check a handler is registered for http reqs; if not, add default one
|
||||||
self.channel_layer = channel_layers[DEFAULT_CHANNEL_LAYER]
|
self.channel_layer = channel_layers[DEFAULT_CHANNEL_LAYER]
|
||||||
self.channel_layer.registry.check_default()
|
self.channel_layer.registry.check_default(
|
||||||
|
http_consumer=self.get_consumer(),
|
||||||
|
)
|
||||||
# Run checks
|
# Run checks
|
||||||
self.stdout.write("Performing system checks...\n\n")
|
self.stdout.write("Performing system checks...\n\n")
|
||||||
self.check(display_num_errors=True)
|
self.check(display_num_errors=True)
|
||||||
|
@ -58,11 +62,12 @@ class Command(RunserverCommand):
|
||||||
"layer": self.channel_layer,
|
"layer": self.channel_layer,
|
||||||
})
|
})
|
||||||
|
|
||||||
# Launch worker as subthread
|
# Launch workers as subthreads
|
||||||
if options.get("run_worker", True):
|
if options.get("run_worker", True):
|
||||||
worker = WorkerThread(self.channel_layer, self.logger)
|
for _ in range(4):
|
||||||
worker.daemon = True
|
worker = WorkerThread(self.channel_layer, self.logger)
|
||||||
worker.start()
|
worker.daemon = True
|
||||||
|
worker.start()
|
||||||
# Launch server in 'main' thread. Signals are disabled as it's still
|
# Launch server in 'main' thread. Signals are disabled as it's still
|
||||||
# actually a subthread under the autoreloader.
|
# actually a subthread under the autoreloader.
|
||||||
self.logger.debug("Daphne running, listening on %s:%s", self.addr, self.port)
|
self.logger.debug("Daphne running, listening on %s:%s", self.addr, self.port)
|
||||||
|
@ -116,6 +121,19 @@ class Command(RunserverCommand):
|
||||||
|
|
||||||
sys.stderr.write(msg)
|
sys.stderr.write(msg)
|
||||||
|
|
||||||
|
def get_consumer(self, *args, **options):
|
||||||
|
"""
|
||||||
|
Returns the static files serving handler wrapping the default handler,
|
||||||
|
if static files should be served. Otherwise just returns the default
|
||||||
|
handler.
|
||||||
|
"""
|
||||||
|
use_static_handler = options.get('use_static_handler', True)
|
||||||
|
insecure_serving = options.get('insecure_serving', False)
|
||||||
|
if use_static_handler and (settings.DEBUG or insecure_serving):
|
||||||
|
return StaticFilesConsumer()
|
||||||
|
else:
|
||||||
|
return ViewConsumer()
|
||||||
|
|
||||||
|
|
||||||
class WorkerThread(threading.Thread):
|
class WorkerThread(threading.Thread):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user