python 多线程下如何正确响应 ctrl + c
我在测试多线程时,发现有写模块无法在多线程下正确响应 ctrl + c,经过我测试,应该为 paste 模块所致,请问这种情况如何处理较好?
import sys
import threading
import time
import bottle
HttpThread1 = None
HttpThread2 = None
@bottle.route('/hello')
def hello():
return "Hello World!"
def server1():
bottle.run(server='paste', port=8081)
def server2():
bottle.run(server='paste', port=8082)
def info():
print(threading.active_count())
try:
HttpThread1 = threading.Thread(target=server1, args=())
HttpThread1.setDaemon(True)
HttpThread1.start()
HttpThread2 = threading.Thread(target=server2, args=())
HttpThread2.setDaemon(True)
HttpThread2.start()
while True:
info()
time.sleep(1)
except KeyboardInterrupt:
sys.exit(1)
我现有的解决方案为采用 multiprocessing 库来解决程序退出问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@同意并接受 @Yujiaao 这样做不行的,对于可以休眠的子线程程序,这样做当然没有问题。
但是, bottle 和 paste 是做 webserver 的,也就是说 run 中运行的是不会结束的,而 bottle 又没有开放 paste 的 API (至少调用没有开放)。
ctrl + c 需要先把事件透传到子线程上去,先结束子线程,然后结束主线程。
还没测试信号处理,我现在测试关闭信号处理,看看能不能解决。
threading.Condition
python3