python多线程中:如何关闭线程?

张春  金牌会员 | 2024-5-13 23:51:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 903|帖子 903|积分 2709

使用 threading.Event 对象关闭子线程
Event 机制工作原理:

Event 是线程间通信的一种方式。其作用相称于1个全局flag,主线程通过控制 event 对象状态,来和谐子线程步调。
使用方式


  • 主线程创建 event 对象,并将其做为参数传给子线程
  • 主线程可以用set()方法将event 对象置为true, 用clear()方法将其置为false。
  • 子线程循环体内,检查 event 对象的值,如果为 True, 则退出循环。
  • 子线程,可使用 event.wait() 将阻塞当前子历程,直至event 对象被置为true.
event 类的常用方法


  • set() 设置 True
  • clear() 设置 False,
  • wait() 使历程等待,直到flag被改为true.
  • is_set() 查询 event 对象,如被设置为真,则返回True, 否则返回False.
  1. class StartDecisionTread(threading.Thread):
  2.     def __init__(self, ins):
  3.         super(StartDecisionTread, self).__init__()
  4.         self.ins = ins
  5.         self.stop_event = threading.Event()
  6.     def run(self):
  7.         while not self.stop_event.is_set():
  8.             print(1)
  9.             model_file_path = rf'1.db'
  10.             if not os.path.exists(model_file_path):
  11.                 self.stop_event.set()
  12. #Python学习交流群:711312441
  13. thread1 = StartDecisionTread(1)
  14. thread1.start()
复制代码
子线程执行其任务循环,它每次循环都会检查event对象,该对象保持 false,就不会触发线程停止。
当主线程调用event对象的 set() 方法后,在子线程循环体内,调用event对象is_set()方法,发现event 对象为True后, 立即退出任务循环,结束运行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表