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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python中的pprint折腾记
Jan 21 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
django初始化数据库的实例
May 27 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
深入了解python中元类的相关知识
Aug 29 Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 Python
python中关于数据类型的学习笔记
Jul 19 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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操作mysql数据库的基本类代码
2014/02/25 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
简单谈谈python中的多进程
2016/11/06 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
详解python中sort排序使用
2019/03/23 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
道路交通安全实施方案
2014/03/12 职场文书
体育专业求职信
2014/07/16 职场文书
卖房协议书样本
2014/10/30 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server