J'ai une classe que je souhaite tester via SimpleXMLRPCServer en python. La façon dont mon test d'unité est configuré est que je crée un nouveau thread, et démarre SimpleXMLRPCServer dans cela. Ensuite, je cours tout le test, et finalement fermé.Exécution de SimpleXMLRPCServer dans un thread séparé et fermeture
Ceci est mon ServerThread:
class ServerThread(Thread):
running = True
def run(self):
self.server = #Creates and starts SimpleXMLRPCServer
while (self.running):
self.server.handle_request()
def stop(self):
self.running = False
self.server.server_close()
Le problème est, que l'appel ServerThread.stop(), suivie Thread.stop() et Thread.join() ne causera pas le fil pour arrêter correctement si il attend déjà une requête dans handle_request. Et comme il ne semble pas y avoir de mécanismes d'interruption ou de délai d'attente que je puisse utiliser, je ne sais pas comment je peux fermer le thread du serveur.
Je garderai cette méthode en tête pour le futur. Je préfère les solutions multiplateformes donc la méthode d'arrêt semble la plus raisonnable. Je l'ai corrigé en envoyant une requête fictive qui terminera le thread comme self.running sera faux. – Staale
Un sous-processus est multi-plateforme. Un sous-processus PLUS la méthode d'auto-destruction fonctionne le mieux. –