mirror of
https://github.com/chatmail/relay.git
synced 2026-05-10 07:54:36 +00:00
filtermail: run CPU-intensive handle_DATA in a thread pool executor
See <https://docs.python.org/3/library/asyncio-eventloop.html#executing-code-in-thread-or-process-pools> for the documentation. This should avoid processing of large messages from hogging asyncio thread and delaying async operations like accepting new connections.
This commit is contained in:
@@ -241,6 +241,10 @@ class OutgoingBeforeQueueHandler:
|
||||
return "250 OK"
|
||||
|
||||
async def handle_DATA(self, server, session, envelope):
|
||||
loop = asyncio.get_running_loop()
|
||||
return await loop.run_in_executor(None, self.sync_handle_DATA, envelope)
|
||||
|
||||
def sync_handle_DATA(self, envelope):
|
||||
log_info("handle_DATA before-queue")
|
||||
error = self.check_DATA(envelope)
|
||||
if error:
|
||||
@@ -294,6 +298,10 @@ class IncomingBeforeQueueHandler:
|
||||
self.config = config
|
||||
|
||||
async def handle_DATA(self, server, session, envelope):
|
||||
loop = asyncio.get_running_loop()
|
||||
return await loop.run_in_executor(None, self.sync_handle_DATA, envelope)
|
||||
|
||||
def sync_handle_DATA(self, envelope):
|
||||
log_info("handle_DATA before-queue")
|
||||
error = self.check_DATA(envelope)
|
||||
if error:
|
||||
|
||||
Reference in New Issue
Block a user