python 如何停止一个死循环的线程


Posted in Python onNovember 24, 2020

进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。

那什么是多线程?提到多线程这里要说两个概念,就是串行和并行,搞清楚这个,我们才能更好地理解多线程。

所谓串行,其实是相对于单条线程来执行多个任务来说的,我们就拿下载文件来举个例子:当我们下载多个文件时,在串行中它是按照一定的顺序去进行下载的,也就是说,必须等下载完A之后才能开始下载B,它们在时间上是不可能发生重叠的。

python 如何停止一个死循环的线程

并行:下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格意义上的,在同一时刻发生的,并行在时间上是重叠的。

python 如何停止一个死循环的线程

问题描述:

前几天写一个项目,然后项目中有一个死循环的线程,我需要让他在我需要的时候直接停止该线程,但是使用基本方法join(),效果是无效的,因此我又去了百度方法,外加国外官方文档,大概的结果就是为了保护进程,这种死循环使用原来方法是很难实现的,

整体解决方案:

创建线程函数

class myThread(threading.Thread):
  def __init__(self, threadID, name, counter):
    threading.Thread.__init__(self)
    self.threadID = threadID
    self.name = name
    self.counter = counter

  def run(self):
    print("开启线程: " + self.name)
    # 获取锁,用于线程同步
    threadLock.acquire()
    # 执行要开启的线程

    # 释放锁,开启下一个线程
    threadLock.release()

死循环函数

def Dead_circle():
  while True:
    print("死循环")

增加结束的条件

def run_go():
  num = 0
  while True:
    time.sleep(1)
    num += 1
    if num == 10:
      return False # 假设我执行10s后结束

增加新方法

def run_go():
  num = 0
  while True:
    time.sleep(1)
    num += 1
    if num == 10:
      return False

修改执行方法

def Dead_circle():
  thread1 = myThread(1, "Thread-1", 1)
  thread1.start()
  while thread1.counter:
    time.sleep(1)
    print("死循环")
  thread1.join()

修改线程类

class myThread(threading.Thread):
  def __init__(self, threadID, name, counter):
    threading.Thread.__init__(self)
    self.threadID = threadID
    self.name = name
    self.counter = counter
    self.State = True

  def run(self):
    print("开启线程: " + self.name)
    # 获取锁,用于线程同步
    threadLock.acquire()
    # 执行要开启的线程
    if not run_go():
      self.counter = False
    # 释放锁,开启下一个线程
    threadLock.release()

整体代码

import threading
import time
from tkinter import *

threadLock = threading.Lock()


class myThread(threading.Thread):
  def __init__(self, threadID, name, counter):
    threading.Thread.__init__(self)
    self.threadID = threadID
    self.name = name
    self.counter = counter
    self.State = True

  def run(self):
    print("开启线程: " + self.name)
    # 获取锁,用于线程同步
    threadLock.acquire()
    # 执行要开启的线程
    if not run_go():
      self.counter = False
    # 释放锁,开启下一个线程
    threadLock.release()


def run_go():
  num = 0
  while True:
    time.sleep(1)
    num += 1
    if num == 10:
      return False


def Dead_circle():
  thread1 = myThread(1, "Thread-1", 1)
  thread1.start()
  while thread1.counter:
    time.sleep(1)
    print("死循环")
  thread1.join()


if __name__ == '__main__':
  Dead_circle()

整体思路

原来的思路是执行线程,然后规定条件,当条件触发时,直接停止该线程,但是由于线程守护的原因,我们没办法使得一个死循环突然停止,因此,我修改了原来的思路,我让死循环函数在定义的时候去创建一个计时线程,这样我的线程就是可控的,通过查找线程中的变量,获得是否停止,这样就可以控制我的线程执行时间。

以上就是python 如何停止一个死循环的线程的详细内容,更多关于python 停止死循环的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
Python引用计数操作示例
Aug 23 Python
python调用staf自动化框架的方法
Dec 26 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
Django工程的分层结构详解
Jul 18 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
python十进制转二进制的详解
Feb 07 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
python 双循环遍历list 变量判断代码
May 04 Python
keras 读取多标签图像数据方式
Jun 12 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 #Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 #Python
Python调用Redis的示例代码
Nov 24 #Python
基于django和dropzone.js实现上传文件
Nov 24 #Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 #Python
Django web自定义通用权限控制实现方法
Nov 24 #Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 #Python
You might like
十天学会php之第四天
2006/10/09 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python中dir函数用法分析
2015/04/17 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
Python解析树及树的遍历
2016/02/03 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
环境工程大学生自荐信
2013/10/21 职场文书
后勤部长岗位职责
2013/12/14 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
绿色环保口号
2014/06/12 职场文书
施工安全汇报材料
2014/08/17 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
学生检讨书
2015/01/27 职场文书