Source code for dramatiq.middleware.asyncio
# This file is a part of Dramatiq.
#
# Copyright (C) 2023 CLEARTYPE SRL <[email protected]>
#
# Dramatiq is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# Dramatiq is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import annotations
from ..asyncio import EventLoopThread, get_event_loop_thread, set_event_loop_thread
from ..logging import get_logger
from .middleware import Middleware
[docs]
class AsyncIO(Middleware):
"""This middleware manages the event loop thread for async actors.
"""
def __init__(self):
self.logger = get_logger(__name__, type(self))
def before_worker_boot(self, broker, worker):
event_loop_thread = EventLoopThread(self.logger)
event_loop_thread.start(timeout=1.0)
set_event_loop_thread(event_loop_thread)
def after_worker_shutdown(self, broker, worker):
event_loop_thread = get_event_loop_thread()
event_loop_thread.stop()
event_loop_thread.join()
set_event_loop_thread(None)