2010-02-08 136 views
1

我正在使用thread.start_new_thread在我的Python应用程序中创建一个线程。停止python中的线程

如果三秒钟内没有完成,我该如何停止它?

+0

如果您正在下载数据,您可以设置套接字超时。 – wisty 2010-02-09 05:30:22

+0

你可能会对StackOverflow的[相关问题](http://stackoverflow.com/questions/2196999/how-to-add-a-timeout-to-a-function-in-python-cross-platform)感兴趣。 – 2010-02-08 17:56:51

回答

1

如果您确实需要这样做(例如,线程调用可能永久挂起的代码),那么考虑重写您的代码以使用多处理模块产生一个进程。然后,您可以使用Process.terminate()方法杀死进程。当然,你需要2.6或更高版本。

1

你不能。线程不能从外面被杀死。您唯一能做的就是添加一种方法让线程退出。显然,如果线程在某个系统调用中被阻塞,你将无法做到这一点。

2

你不能直接这样做。无论如何,放弃一个线程并不是一个好的做法 - 而是考虑使用同步机制,让您以“软”的方式中止线程。

但是如果不存在非守护线程(例如,如果唯一的主线程结束),daemonic threads将自动中止。也许这就是你想要的。

+0

这对我有用! – daviewales 2013-02-13 02:11:01

1

related question所述,您可能会通过ctypes.pythonapi引发异常,但在等待系统调用时可能会发生异常。