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里将list中元素依次向前移动一位
Sep 12 Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
python中PIL安装简单教程
Apr 21 Python
深入理解Python中range和xrange的区别
Nov 26 Python
tensorflow中next_batch的具体使用
Feb 02 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
python神经网络编程实现手写数字识别
May 27 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
python进行二次方程式计算的实例讲解
Dec 06 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统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
php读取3389的脚本
2014/05/06 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
php中请求url的五种方法总结
2017/07/13 PHP
CSS常用网站布局实例
2008/04/03 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
Windows下安装Scrapy
2018/10/17 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
P/Invoke是什么
2015/07/31 面试题
求职信内容考虑哪几点
2013/10/05 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
施工员岗位职责
2014/03/16 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
党员三严三实心得体会
2014/10/13 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
小学运动会入场词
2015/07/18 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
解决vue中provide inject的响应式监听
2022/04/19 Vue.js