Skip to content

Gunicorn fractal

CLASS DESCRIPTION
FractalWorker

Subclass of uvicorn workers, which also captures SIGABRT and handles

Classes

FractalWorker

Bases: UvicornWorker

Subclass of uvicorn workers, which also captures SIGABRT and handles it within the custom_handle_abort method.

METHOD DESCRIPTION
custom_handle_abort

Custom version of gunicorn.workers.base.Worker.handle_abort,

Source code in fractal_server/gunicorn_fractal.py
class FractalWorker(UvicornWorker):
    """
    Subclass of uvicorn workers, which also captures SIGABRT and handles
    it within the `custom_handle_abort` method.
    """

    def init_signals(self) -> None:
        super().init_signals()
        signal.signal(signal.SIGABRT, self.custom_handle_abort)
        logger.info(
            f"[FractalWorker.init_signals - pid={self.pid}] "
            "Set `custom_handle_abort` for SIGABRT"
        )

    def custom_handle_abort(self, sig, frame) -> None:
        """
        Custom version of `gunicorn.workers.base.Worker.handle_abort`,
        transforming SIGABRT into SIGTERM.
        """
        self.alive = False
        logger.info(
            f"[FractalWorker.custom_handle_abort - pid={self.pid}] "
            "Now send SIGTERM to process."
        )
        os.kill(self.pid, signal.SIGTERM)

Methods:

custom_handle_abort(sig, frame)

Custom version of gunicorn.workers.base.Worker.handle_abort, transforming SIGABRT into SIGTERM.

Source code in fractal_server/gunicorn_fractal.py
def custom_handle_abort(self, sig, frame) -> None:
    """
    Custom version of `gunicorn.workers.base.Worker.handle_abort`,
    transforming SIGABRT into SIGTERM.
    """
    self.alive = False
    logger.info(
        f"[FractalWorker.custom_handle_abort - pid={self.pid}] "
        "Now send SIGTERM to process."
    )
    os.kill(self.pid, signal.SIGTERM)