python中threading开启关闭线程操作


Posted in Python onMay 02, 2020

在python中启动和关闭线程:

首先导入threading

import threading

然后定义一个方法

def serial_read():
...
...

然后定义线程,target指向要执行的方法

myThread = threading.Thread(target=serial_read)

启动它

myThread.start()

二、停止线程

不多说了直接上代码

import inspect
import ctypes
def _async_raise(tid, exctype):
  """raises the exception, performs cleanup if needed"""
  tid = ctypes.c_long(tid)
  if not inspect.isclass(exctype):
    exctype = type(exctype)
  res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
  if res == 0:
    raise ValueError("invalid thread id")
  elif res != 1:
    # """if it returns a number greater than one, you're in trouble,
    # and you should call it again with exc=NULL to revert the effect"""
    ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
    raise SystemError("PyThreadState_SetAsyncExc failed")
def stop_thread(thread):
  _async_raise(thread.ident, SystemExit)

停止线程

stop_thread(myThread)

补充知识:python threading实现Thread的修改值,开始,运行,停止,并获得内部值

下面的半模版代码在 win7+python3.63 运行通过并且实测可行,为了广大想要实现python的多线程停止的同学

import threading
import time
class MyThread(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
    self.Flag=True        #停止标志位
    self.Parm=0         #用来被外部访问的
    #自行添加参数
  
  def run(self):
    while(True):
      if(not self.Flag):
        break
      else:
        time.sleep(2)
  
  def setFlag(self,parm):     #外部停止线程的操作函数
    self.Flag=parm #boolean
 
  def setParm(self,parm):     #外部修改内部信息函数
    self.Parm=parm
 
  def getParm(self):       #外部获得内部信息函数
    return self.Parm
 
 
if __name__=="__main__":
  testThread=MyThread()
  testThread.setDaemon(True)     #设为保护线程,主进程结束会关闭线程
  testThread.getParm()      #获得线程内部值
  testThread.setParm(1)      #修改线程内部值
  testThread.start()       #开始线程
  print(testThread.getParm())    #输出内部信息
  time.sleep(2)          #主进程休眠 2 秒
  testThread.setFlag(False)      #修改线程运行状态
  time.sleep(2)          #2019.04.25 修改
  print(testThread.is_alive())  #查看线程运行状态

于2018-08-24修正一次,修正为在继承thread.Thread时,没有对父类初始化

旧:

def __init__(self):
    self.Flag=True        #停止标志位
    self.Parm=0         #用来被外部访问的
    #自行添加参数

新:

def __init__(self):
    threading.Thread.__init__(self)
    self.Flag=True        #停止标志位
    self.Parm=0         #用来被外部访问的
    #自行添加参数

于2019年4月25日进行第二次修正,发现设置flag值后仍为true输出的情况,原因是输出在修改完成前执行,睡眠后结果正常

以上这篇python中threading开启关闭线程操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python虚拟环境迁移方法
Jan 03 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
Apr 28 Python
python中使用input()函数获取用户输入值方式
May 03 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
python re模块常见用法例举
Mar 01 Python
Python下载商品数据并连接数据库且保存数据
Mar 31 Python
浅谈python3打包与拆包在函数的应用详解
May 02 #Python
构建高效的python requests长连接池详解
May 02 #Python
如何基于windows实现python定时爬虫
May 01 #Python
如何基于python实现不邻接植花
May 01 #Python
Python接口测试结果集实现封装比较
May 01 #Python
解决python虚拟环境切换无效的问题
Apr 30 #Python
python爬虫实现POST request payload形式的请求
Apr 30 #Python
You might like
详细介绍PHP应用提速面面观
2006/10/09 PHP
php可变长参数处理函数详解
2017/02/22 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
python异步存储数据详解
2019/03/19 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
python实现简单颜色识别程序
2020/02/19 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
医院实习介绍信
2014/01/12 职场文书
职业女性的职业规划
2014/03/04 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
新学期开学寄语2016
2015/12/04 职场文书
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android