14
14
import signal
15
15
import sys
16
16
import textwrap
17
+ import threading
17
18
import time
18
19
import warnings
19
20
from typing import TYPE_CHECKING , Any , Literal , Optional , Sequence , Union
@@ -45,8 +46,6 @@ def __init__(self, main_pid, mlflow_run_id, mlflow_tracking_uri):
45
46
self .main_pid = main_pid
46
47
self .mlflow_run_id = mlflow_run_id
47
48
self .mlflow_tracking_uri = mlflow_tracking_uri
48
- self .exit_event = multiprocessing .Event ()
49
- self .crash_event = multiprocessing .Event ()
50
49
51
50
def handle_sigterm (self , signum , frame ):
52
51
from mlflow import MlflowClient
@@ -57,11 +56,24 @@ def handle_sigterm(self, signum, frame):
57
56
client .set_terminated (self .mlflow_run_id , status = 'KILLED' )
58
57
59
58
def run (self ):
59
+ self .exit_event = threading .Event ()
60
+ self .crash_event = threading .Event ()
61
+
60
62
from mlflow import MlflowClient
61
63
62
64
os .setsid ()
63
- # Register the signal handler in the child process
64
- signal .signal (signal .SIGTERM , self .handle_sigterm )
65
+ # Define signal handlers for communication
66
+ def handle_exit_signal (signum , frame ):
67
+ self .exit_event .set ()
68
+
69
+ def handle_crash_signal (signum , frame ):
70
+ self .crash_event .set ()
71
+ self .exit_event .set ()
72
+
73
+ # Register the signal handlers
74
+ signal .signal (signal .SIGUSR1 , handle_exit_signal ) # For normal exit
75
+ signal .signal (signal .SIGUSR2 , handle_crash_signal ) # For crash exit
76
+ signal .signal (signal .SIGTERM , self .handle_sigterm ) # For termination
65
77
66
78
while not self .exit_event .wait (10 ):
67
79
try :
@@ -79,13 +91,12 @@ def run(self):
79
91
def stop (self ):
80
92
log .debug ("Setting exit event" )
81
93
print ("Setting exit event" )
82
- self .exit_event . set ( )
94
+ os . kill ( self .pid , signal . SIGUSR1 )
83
95
log .debug ("Setting exit event done" )
84
96
print ("Setting exit event done" )
85
97
86
98
def crash (self ):
87
- self .crash_event .set ()
88
- self .exit_event .set ()
99
+ os .kill (self .pid , signal .SIGUSR2 )
89
100
90
101
91
102
class MLFlowLogger (LoggerDestination ):
0 commit comments