@@ -150,6 +150,7 @@ class Worker:
150150 :param on_shutdown: coroutine function to run at shutdown
151151 :param on_job_start: coroutine function to run on job start
152152 :param on_job_end: coroutine function to run on job end
153+ :param after_job_end: coroutine function to run after job has ended and results have been recorded
153154 :param handle_signals: default true, register signal handlers,
154155 set to false when running inside other async framework
155156 :param max_jobs: maximum number of jobs to run at a time
@@ -189,6 +190,7 @@ def __init__(
189190 on_shutdown : Optional ['StartupShutdown' ] = None ,
190191 on_job_start : Optional ['StartupShutdown' ] = None ,
191192 on_job_end : Optional ['StartupShutdown' ] = None ,
193+ after_job_end : Optional ['StartupShutdown' ] = None ,
192194 handle_signals : bool = True ,
193195 max_jobs : int = 10 ,
194196 job_timeout : 'SecondsTimedelta' = 300 ,
@@ -227,6 +229,7 @@ def __init__(
227229 self .on_shutdown = on_shutdown
228230 self .on_job_start = on_job_start
229231 self .on_job_end = on_job_end
232+ self .after_job_end = after_job_end
230233 self .sem = asyncio .BoundedSemaphore (max_jobs )
231234 self .job_timeout_s = to_seconds (job_timeout )
232235 self .keep_result_s = to_seconds (keep_result )
@@ -635,6 +638,9 @@ async def job_failed(exc: BaseException) -> None:
635638 )
636639 )
637640
641+ if self .after_job_end :
642+ await self .after_job_end (ctx )
643+
638644 async def finish_job (
639645 self ,
640646 job_id : str ,
0 commit comments