summary refs log tree commit diff
path: root/synapse/server.py
diff options
context:
space:
mode:
authorErik Johnston <erikj@element.io>2024-08-13 17:59:47 +0100
committerGitHub <noreply@github.com>2024-08-13 17:59:47 +0100
commita9fc1fd112162a50e361768788523c46d2655dc7 (patch)
tree5fe2f9615032120cfe916e8a839892474d53e679 /synapse/server.py
parentAdd a utility function for generating fake event IDs (#17557) (diff)
downloadsynapse-a9fc1fd112162a50e361768788523c46d2655dc7.tar.xz
Use a larger, dedicated threadpool for media sending (#17564)
Diffstat (limited to 'synapse/server.py')
-rw-r--r--synapse/server.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/synapse/server.py b/synapse/server.py

index 46b9d83a04..8b07bb39a0 100644 --- a/synapse/server.py +++ b/synapse/server.py
@@ -34,6 +34,7 @@ from typing_extensions import TypeAlias from twisted.internet.interfaces import IOpenSSLContextFactory from twisted.internet.tcp import Port +from twisted.python.threadpool import ThreadPool from twisted.web.iweb import IPolicyForHTTPS from twisted.web.resource import Resource @@ -941,3 +942,21 @@ class HomeServer(metaclass=abc.ABCMeta): @cache_in_self def get_task_scheduler(self) -> TaskScheduler: return TaskScheduler(self) + + @cache_in_self + def get_media_sender_thread_pool(self) -> ThreadPool: + """Fetch the threadpool used to read files when responding to media + download requests.""" + + # We can choose a large threadpool size as these threads predominately + # do IO rather than CPU work. + media_threadpool = ThreadPool( + name="media_threadpool", minthreads=1, maxthreads=50 + ) + + media_threadpool.start() + self.get_reactor().addSystemEventTrigger( + "during", "shutdown", media_threadpool.stop + ) + + return media_threadpool