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写asp详细讲解
Dec 16 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
用C++封装MySQL的API的教程
May 06 Python
Python3实现从文件中读取指定行的方法
May 22 Python
python生成器generator用法实例分析
Jun 04 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
简单实现Python爬取网络图片
Apr 01 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
tensorflow多维张量计算实例
Feb 11 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
pycharm 使用anaconda为默认环境的操作
Feb 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
追求程序速度,而不是编程的速度
2008/04/23 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
Python内置模块logging用法实例分析
2018/02/12 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
python 对xml解析的示例
2021/02/27 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
感恩母亲节演讲稿
2014/05/07 职场文书
宿舍标语大全
2014/06/19 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
2015年保管员工作总结
2015/04/30 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis