Python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 对于函数中没有循环,可以使用join()来结束循环。
其中方法之一:一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了. threading中Event对象能实现此功能。

  • 对于event.isSet()可以查看event的状态,
  • set()函数返回为True,
  • clear()函数返回为False。
  • self.__flag.wait() 中self.__flag为True时立即返回, 为False时阻塞直到self.__flag为True后返回
    另一个方法是使用信号量。
    def wait(self, timeout=None):"""Block until the internal flag is true.If the internal flag is true on entry, return immediately. Otherwise,block until another thread calls set() to set the flag to true, or untilthe optional timeout occurs.阻塞, 直到内部的标志位为True时. 如果在内部的标志位在进入时为True时, 立即返回. 否则, 阻塞直到其他线程调用set()方法将标准位设为True, 或者到达了可选的timeout时间.When the timeout argument is present and not None, it should be afloating point number specifying a timeout for the operation in seconds(or fractions thereof).当给定了timeout参数且不为None, 它应该是一个浮点数,以秒为单位指定操作的超时(或是分数)。此方法在退出时返回内部标志,因此除非给定了超时且操作超时,否则它将始终返回True。This method returns the internal flag on exit, so it will always returnTrue except if a timeout is given and the operation times out."""......

利用wait的阻塞机制, 就能够实现暂停和恢复了, 再配合循环判断标识位, 就能实现退出了, 下面是代码示例:

#!/usr/bin/python
# coding: utf-8import threading
import timeclass Job(threading.Thread):def __init__(self, *args, **kwargs):super(Job, self).__init__(*args, **kwargs)# 用于暂停线程的标识self.__flag = threading.Event()   self.__flag.set()    # 设置为True# 用于停止线程的标识self.__running = threading.Event()   self.__running.set()   # 将running设置为Truedef run(self):while self.__running.isSet():self.__flag.wait()   # 为True时立即返回, 为False时阻塞直到内部的标识位为True后返回print time.time()time.sleep(1)def pause(self):self.__flag.clear()   # 设置为False, 让线程阻塞def resume(self):self.__flag.set()  # 设置为True, 让线程停止阻塞def stop(self):self.__flag.set()    # 将线程从暂停状态恢复, 如果已经暂停的话self.__running.clear()    # 设置为False

python 实现线程的暂停, 恢复, 退出详解及实例相关推荐

  1. 简述python文件操作_Python 文件操作的详解及实例

    Python 文件操作的详解及实例 一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. ...

  2. python barrier_Python线程障碍对象Barrier原理详解

    python线程Barrier俗称障碍对象,也称栅栏,也叫屏障. 一.线程障碍对象Barrier简介 # 导入线程模块 import threading # 障碍对象barrier barrier = ...

  3. Python面对对象编程——对象、类详解及实例

    Python中类与对象的初认识 1.Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的 ...

  4. python strip和split_python strip() 函数和 split() 函数的详解及实例

    python strip() 函数和 split() 函数的详解及实例 一直以来都分不清楚strip和split的功能,实际上strip是删除的意思:而split则是分割的意思.因此也表示了这两个功能 ...

  5. python协程详解_对Python协程之异步同步的区别详解

    一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...

  6. 匿名函数python_基于python内置函数与匿名函数详解

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...

  7. python菜单怎么做_Python 城市菜单详解(超详解)

    print("--------城市查询系统---------") print("--------按数值进行查询--------") menu={"内蒙 ...

  8. python中时间戳、字符串之间转换详解

    [转载]python中时间戳.字符串之间转换详解 (2013-04-30 17:36:07) 转载▼ 标签: 转载 原文地址:python中时间戳.字符串之间转换详解作者:doris0920 1)秒数 ...

  9. python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...

最新文章

  1. 窗口函数(防忘笔记)
  2. Android设置默认文件管理器,使用默认资源管理器在Android中查看文件夹内容
  3. openwrt 需要高级浏览器_OpenWrt的新(shi)奇(yong)玩法
  4. Struts2中使用OGNL表达式投影(过滤)集合
  5. 微信小程序一定要用https的理由,小程序使用HTTPS链接分析
  6. EASYUI+MVC4通用权限管理平台
  7. linux内核参数备注
  8. python语言只能用4个空格_python - 单词之间只保留一个空格,用replace为什么会出错...
  9. matlab 画图串联_Matlab串联矩阵函数【horzcat】详细解析
  10. XenServer 7.0基础命令及故障处理办法
  11. springboot整合webservice接口以及碰到的问题
  12. 超分算法IPT:Pre-Trained Image Processing Transformer
  13. 一图看懂西方哲学全脉络
  14. 一路(16)奔波,一起(17)前行—2016 年终总结
  15. 【转载】Unity3D导入图片属性信息和默认shader介绍
  16. 修改cmd命令窗口的编码格式
  17. i3 1005G1和 i5 1035G1 哪个好
  18. 重启tomcat命令
  19. IEEE754的理解归纳
  20. 什么降风噪最好的蓝牙耳机?2021主动降噪耳机推荐

热门文章

  1. 算法工程师8——机器学习概述(中篇-基本算法)
  2. 中铁上海工程局华东研发中心展厅,cave沉浸空间设计,三折幕片源制作
  3. Oracle 11.2.0.4打PSU 11.2.0.4.161018
  4. ASP.net GridView控件(删除/更新功能)
  5. 华为Mate40国内版价格揭晓 售价4999元起
  6. vue美食杰项目之菜谱大全实现效果(一)
  7. 如何拯救你的职业困境?
  8. DevExpress RibbonControl 左上方 一本书的图标如何去掉
  9. linux桌面环境安装软件,桌面应用|轻松使用 Linux Equinox 桌面环境
  10. [ACNOI2022]树上构造