Fix signal handling
In a threaded Python3 application only the main thread receives signals, cf. Python3 Library Reference: Signals and threads. The launcher main thread does not handle signals at all and if it did, there would no mechanisms to stop the other threads (Python3 threads can neither be stopped nor killed by other threads, see the Python3
threading documentation). It is necessary to handle signals so that users and developers can stop Melissa by pressing Ctrl+C on the keyboard.
Launcher main loop in
Study.fault_tolerance() does not do signal handling):
while (not self.server_obj.want_stop) and (self.server_obj.status != FINISHED or any([i.status != FINISHED for i in self.groups])): if self.fault_tolerance() != 0: return time.sleep(0.05)