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中ConfigParse模块的用法
Sep 29 Python
分享一个常用的Python模拟登陆类
Mar 29 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Python continue继续循环用法总结
Jun 10 Python
python清除字符串前后空格函数的方法
Oct 21 Python
Python rstrip()方法实例详解
Nov 11 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
Python获取指定网段正在使用的IP
Dec 14 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 Python
Python 阶乘详解
Oct 05 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
jQuery 学习 几种常用方法
2009/06/11 Javascript
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
小程序实现密码输入框
2020/11/16 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
详解Python pygame安装过程笔记
2017/06/05 Python
python 中random模块的常用方法总结
2017/07/08 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
推荐信模板
2014/05/09 职场文书
统计专业自荐书
2014/07/06 职场文书
个人剖析材料范文
2014/09/30 职场文书
社保转移委托书范本
2014/10/08 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
大班上学期个人总结
2015/02/13 职场文书
创业计划书之美容店
2019/09/16 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android