此时子线程是无限挂起状态,主线程已经无法杀死它。在主线程里监听信号,当有退出信号时,给子线程一个标志位,子线程识别到标志位,就在处理好事务后,主动结束自己(通常是函数的return或循环的break) ps.信号 SIGINT,代表 Ctrl+C 或 pm2 的 stop。信号 SIGTERM,代表 kill命令 或 pm2 的 kill。
signal.signal(signal.SIGINT,sigint_handler) 在100秒内按下ctrl-c没有反应,只有当子线程结束后才会出现打印 "main-thread exit",可见 ctrl-c被阻测了 threading 中在主线程结束时进行的操作: _shutdown = _MainThread()._exitfunc def _exitfunc(self): self._Thread__stop() t = _pickSomeNonDaemonThrea...
threading.Conditionpython3importthreadingimporttimeclass子线程(threading.Thread):def__init__(self):sup...
您可以使用信号模块捕获SIGINT(Ctrl+C)信号并停止调度程序。下面是一个例子:
python多线程ctrl-c退出问题 场景: 经常会遇到下述问题:很多io busy的应用采取多线程的方式来解决,但这时候会发现python命令行不响应ctrl-c了,而对应的java代码则没有问题: publicclass Test { publicstaticvoid main(String[] args)throws Exception {
controller.stop() 我想修改它,比如它不等待ENTER,而是等待CTRL+C,而不使用while True无限循环,因为这会消耗CPU。如果可能的话,最好不要使用大量的库导入。有什么比在循环中使用time.sleep(1)更好的吗?因为aiosmtpd.controller已经在它的线程中运行了,主线程除了等待CTRL+C之外没有做任何有用的事情。