2010-02-08 4 views
1

Je crée un thread dans mon application Python avec thread.start_new_thread.Arrêt d'un thread en python

Comment l'arrêter si elle n'a pas fini dans trois secondes?

+0

Si vous téléchargez des données, vous pouvez définir un délai d'attente de socket. – wisty

+0

Vous pourriez être intéressé par ceci [question connexe] (http://stackoverflow.com/questions/2196999/how-to-add-a-timeout-to-a-function-in-python-cross-platform) sur StackOverflow . –

Répondre

1

Si vous avez vraiment besoin de le faire (par exemple, le code des appels de threads peut être suspendu indéfiniment), pensez à réécrire votre code pour générer un processus avec le module multitraitement. Vous pouvez ensuite tuer le processus avec la méthode Process.terminate(). Vous aurez besoin de 2.6 ou plus tard pour cela, bien sûr.

1

Vous ne pouvez pas. Les threads ne peuvent pas être tués de l'extérieur. La seule chose que vous pouvez faire est d'ajouter un moyen de demander au thread de sortir. Évidemment, vous ne pourrez pas le faire si le thread est bloqué dans un appel système.

2

Vous ne pouvez pas faire cela directement. Quoi qu'il en soit, abandonner un thread n'est pas une bonne pratique - pensez plutôt à utiliser des mécanismes de synchronisation qui vous permettent d'abandonner le thread de manière "douce".

Mais daemonic threads sera automatiquement annulé si aucun thread non démoniaque ne subsiste (par exemple si le seul thread principal se termine). Peut-être que c'est ce que tu veux.

+0

Cela a fonctionné pour moi! – daviewales

1

Comme indiqué dans un related question, vous pouvez générer une exception via ctypes.pythonapi, mais pas pendant qu'il attend un appel système.