我有一个(命令行/终端)程序,该程序使用工作线程从队列和下载索引文件的主线程(每页50个条目)中删除网站。如何让程序检查中断(CTRL + C或我自己定义的中断),当它捕获到这样的中断时,它将首先清理(下载剩余的队列)然后终止。
答案 0 :(得分:2)
使用如下的异常处理程序包装等待线程完成的主函数:
try:
main()
except KeyboardInterrupt:
stop()
def stop():
for t in threads:
t.my_stop_function()
# wait for threads to stop here...
class MyThread(threading.Thread):
def __init__(self, *args, **kwargs):
threading.Thread.__init__(self, *args, **kwargs)
self.stop = False
def my_stop_function(self):
self.stop = True
def run(self):
while not self.stop:
scrape()
答案 1 :(得分:1)
在主循环中,您希望捕获KeyboardInterrupt异常(当用户按CTRL-C时引发)。对于处理清理,您可以使用atexit模块运行一些全局清理函数,或使用threading.Event / threading.Condition通知工作线程自行清理并退出。
import atexit
atexit.register(cleanup_function)