mirror of
https://github.com/django/daphne.git
synced 2024-11-27 10:13:44 +03:00
parent
6199d509c2
commit
71ba440761
|
@ -20,6 +20,12 @@ Unreleased
|
||||||
|
|
||||||
* Added ``--log-fmt`` CLI argument.
|
* Added ``--log-fmt`` CLI argument.
|
||||||
|
|
||||||
|
* Added support for ``ASGI_THREADS`` environment variable, setting the maximum
|
||||||
|
number of workers used by a ``SyncToAsync`` thread-pool executor.
|
||||||
|
|
||||||
|
Set e.g. ``ASGI_THREADS=4 daphne ...`` when running to limit the number of
|
||||||
|
workers.
|
||||||
|
|
||||||
3.0.2 (2021-04-07)
|
3.0.2 (2021-04-07)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,18 @@
|
||||||
# This has to be done first as Twisted is import-order-sensitive with reactors
|
# This has to be done first as Twisted is import-order-sensitive with reactors
|
||||||
import asyncio # isort:skip
|
import asyncio # isort:skip
|
||||||
|
import os # isort:skip
|
||||||
import sys # isort:skip
|
import sys # isort:skip
|
||||||
import warnings # isort:skip
|
import warnings # isort:skip
|
||||||
|
from concurrent.futures import ThreadPoolExecutor # isort:skip
|
||||||
from twisted.internet import asyncioreactor # isort:skip
|
from twisted.internet import asyncioreactor # isort:skip
|
||||||
|
|
||||||
|
|
||||||
twisted_loop = asyncio.new_event_loop()
|
twisted_loop = asyncio.new_event_loop()
|
||||||
|
if "ASGI_THREADS" in os.environ:
|
||||||
|
twisted_loop.set_default_executor(
|
||||||
|
ThreadPoolExecutor(max_workers=int(os.environ["ASGI_THREADS"]))
|
||||||
|
)
|
||||||
|
|
||||||
current_reactor = sys.modules.get("twisted.internet.reactor", None)
|
current_reactor = sys.modules.get("twisted.internet.reactor", None)
|
||||||
if current_reactor is not None:
|
if current_reactor is not None:
|
||||||
if not isinstance(current_reactor, asyncioreactor.AsyncioSelectorReactor):
|
if not isinstance(current_reactor, asyncioreactor.AsyncioSelectorReactor):
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
from argparse import ArgumentError
|
from argparse import ArgumentError
|
||||||
from unittest import TestCase
|
from unittest import TestCase, skipUnless
|
||||||
|
|
||||||
from daphne.cli import CommandLineInterface
|
from daphne.cli import CommandLineInterface
|
||||||
from daphne.endpoints import build_endpoint_description_strings as build
|
from daphne.endpoints import build_endpoint_description_strings as build
|
||||||
|
@ -255,3 +256,12 @@ class TestCLIInterface(TestCase):
|
||||||
Passing `--no-server-name` will set server name to '' (empty string)
|
Passing `--no-server-name` will set server name to '' (empty string)
|
||||||
"""
|
"""
|
||||||
self.assertCLI(["--no-server-name"], {"server_name": ""})
|
self.assertCLI(["--no-server-name"], {"server_name": ""})
|
||||||
|
|
||||||
|
|
||||||
|
@skipUnless(os.getenv("ASGI_THREADS"), "ASGI_THREADS environment variable not set.")
|
||||||
|
class TestASGIThreads(TestCase):
|
||||||
|
def test_default_executor(self):
|
||||||
|
from daphne.server import twisted_loop
|
||||||
|
|
||||||
|
executor = twisted_loop._default_executor
|
||||||
|
self.assertEqual(executor._max_workers, int(os.getenv("ASGI_THREADS")))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user