如何解决加锁线程发生异常后,执行sys.exit()代码导致终端被卡死的问题?

TeamsSix 2019-11-12 08:54:23
我想达到的目的:有多个被加锁的线程正在运行,如果其中有线程发生了异常,就让程序退出,其他线程不再运行回显结果。

但我发现如果程序直接退出,锁就没法释放,终端就会卡死,我写了一个示例如下:



如果先释放再退出程序,这时候程序可以被正常退出,但是其他线程的内容也会被显示



谷歌了一天也没找到办法,我要怎么修改才能达到:某一个线程发生异常直接退出,而其他线程不被执行呢?希望各位大佬走过路过能给小弟一个提示解答,蟹蟹
...全文
326 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TeamsSix 2019-11-13
  • 打赏
  • 举报
回复
引用 4 楼 seakingx 的回复:
线程的概念就是并行呀。 比如线程1 要花5秒 线程2 要花10秒, 第 3秒 和 第 8秒 有输出 线程1,2 同时启动 线程1 到第 4秒时异常了 , 你无法确保不输出 线程2 第3秒时的输出。 1、先确认是否正常中断 test2 2、如果你只想象控制 输出, 可以考虑采用消息机制, 输出前,先判断是否主线程已经传递中断信号。
我去学习了解一下信息机制,谢谢大佬
陈年椰子 2019-11-13
  • 打赏
  • 举报
回复
线程的概念就是并行呀。 比如线程1 要花5秒 线程2 要花10秒, 第 3秒 和 第 8秒 有输出 线程1,2 同时启动 线程1 到第 4秒时异常了 , 你无法确保不输出 线程2 第3秒时的输出。 1、先确认是否正常中断 test2 2、如果你只想象控制 输出, 可以考虑采用消息机制, 输出前,先判断是否主线程已经传递中断信号。
TeamsSix 2019-11-13
  • 打赏
  • 举报
回复
引用 1 楼 seakingx 的回复:
我理解是 test1 执行的时候, test2 也执行了, 输出是按队列来的。 可以试试如果 test2 足够长,看是否会被中断。 把 test2 的动作改成 for i in range(100): print('test do',i) sleep(1) 看看是否被中断。
我这里写的是示例代码,如果把test2执行时间变长的话那也是治标不治本呀
陈年椰子 2019-11-13
  • 打赏
  • 举报
回复
我理解是 test1 执行的时候, test2 也执行了, 输出是按队列来的。 可以试试如果 test2 足够长,看是否会被中断。 把 test2 的动作改成 for i in range(100): print('test do',i) sleep(1) 看看是否被中断。

37,742

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧