python判断线程是否执行完成_判断Threading.start新线程是否执行完毕的实例
新写自己的Threading类
class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断
def __init__(self,func = ""):#输入待执行函数名 我执行的函数没有参数就没有加args输入了
threading.Thread.__init__(self)
self.func = func
self.result = 1#未完成为1 标志位
# 调用start自动执行的函数
def run(self):
self.result = self.func()
self.result = 0#完成返回0
然后执行
class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断
def __init__(self,func = ""):#输入待执行函数名 我执行的函数没有参数就没有加args输入了
threading.Thread.__init__(self)
self.func = func
self.result = 1#未完成为1 标志位
# 调用start自动执行的函数
def run(self):
self.result = self.func()
self.result = 0#完成返回0
这样就可以判断os.sysytem里语句是否执行完成是否
补充知识:python的threading.Thread线程的start、run、join、setDaemon
Pycharm整体看下Thread类的内容:模拟的是Java的线程模型
表示方法method,上面的锁头表示这个是类内部的方法,从方法名字命名规范可以看出,都是_和__开头的,一个下划线表示是子类可以继承,两个下划线表示是只有Thread内部可以访问,子类都不可以访问。
表示property,可以使用类直接访问:Thread._block
表示field,就是self.x定义的东东
表示变量variable
name/getName/setName是线程名字有关的;
isDaemon是否是守护进程
setDaemon设置为守护进程,如果把调用线程设置为守护线程,那么等调用线程结束后,被调用的子线程结束与否都会随着守护线程结束
isAlive线程是否是活动状态
start方法开启一个新线程。把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法。
run线程实际在运行的内容,可以被子类继承和重写overide。
join阻塞调用它的线程,直到等待被调用的线程运行结束,其实就变成了单线程。参数timeout的作用是,当前线程等待被调用的子线程的时间,如果时间到了,不管子线程是否结束,当前线程都进入就绪状态,重新等待CPU调度。
Join方法的Java示例:
新建一个Thread类,重写run()方法:
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("子线程执行完毕");
}
}
新建测试类,测试Join()方法:
public class TestThread {
public static void main(String[] args) {
//循环五次
for (int i = 0; i < 5; i++) {
MyThread thread = new MyThread();
//启动线程
thread.start();
try {
//调用join()方法
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程执行完毕");
System.out.println("~~~~~~~~~~~~~~~");
}
}
}
输出结果如下:
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
结果分析: 子线程每次都在主线程之前执行完毕,即子线程会在主线程之前执行。
什么时候用join()方法?
在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止。
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法
可见join和setDaemon作用是相反的,一个是等待子线程结束,一个是不等到子线程结束,有可能把子线程强制结束。如果两个都不设置的时候,那么主线程和子线程各自运行各自的,互不干扰,谁结束都不会影响另一个运行情况:见https://www.jb51.net/article/185872.htm示例
以上这篇判断Threading.start新线程是否执行完毕的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。
python判断线程是否执行完成_判断Threading.start新线程是否执行完毕的实例相关推荐
- python判断线程结束_判断Threading.start新线程是否执行完毕的实例
新写自己的Threading类 class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断 def __init__( ...
- mysql 判断list不为空_判断List集合为空还是null的正确打开方式
事故场景还原 最近在写一个项目的时候遇到一个这样一个问题,我简单的还原一下场景,这是模拟一个简单的管理系统 ① 一张简单的客户表 CREATE TABLE customer( id INT(11) N ...
- java守护线程的使用场景_浅谈Java守护线程
一.在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 1.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收 ...
- java 线程池 初始大小_为什么tomcat的默认线程池大小如此之大? - java
我注意到默认的tomcat 7线程池大小似乎是200. 但是普通的CPU似乎有16个内核. 因此只能并行执行16个线程 为什么tomcat使用那么多线程. 参考方案 多年以来,许多单核计算机问世,并且 ...
- python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
- 用python输出所有的玫瑰花数_##判断某一个四位数是不是玫瑰花数(所谓
用Python matplotlib 怎么画风向玫瑰图 能给出程序的 提前安windrose模 from windrose import WindroseAxes from matplotlib im ...
- python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别
基本上判断python对象是否为可调用的函数,有三种方法: 1.使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定 ...
- python判断字符串是否回文_判断字符串是否为回文 python
回文正序和逆序一样的字符串,例如abccba 方法一 def is_palindrome1(text): l = list(text) l.reverse() t1 = ''.join(l) if t ...
- python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]
练习内容:判断多个坐标是否在同一条直线上 完整代码和注释如下 print('请输入几个点的横纵坐标,程序将会返回这几个点是否在同一条直线上') def coor_nums():#获得每个值的横纵坐标 ...
最新文章
- PL/SQL Developer 导出表结构和表数据
- Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)
- mysql datatable_MySQL-数据表操作
- mysql启动选项只读_MySQL的启动选项和系统变量该如何配置?
- Android 运行时异常 Binary XML file line # : Error inflating class
- 铁芯用matlab怎么仿真,Simulink的BLDC建模与仿真
- Scintilla开源库使用指南
- 相似图片搜索原理和JAVA代码实现
- 量价交易——寻找妖股的底部结构
- oracle 一个表上的多个触发器的执行顺序
- win10多用户同时远程桌面登陆(允许多个RDP会话)-支持win10最新1909版2004版
- CS 188 (4) Uniform Cost Search( 统一代价搜索算法)
- 001 Python 字符串格式化 % 运算符
- 【杂谈】中国黑客致中国黑客和红客的公开信
- Unity技能系统框架(一)技能效果
- 安全数据集和开源工具
- 阿里云无影云桌面(使用测评)
- 2021 ICPC 南京站总结以及真题PDF
- Java正则表达式——验证手机号码符合性
- Ubuntu18下xsens IMU的驱动安装及使用imu_utils标定
热门文章
- linux下PNG、JEPG、JPG、Webp图片格式互转
- 在服务器上创建文件夹,在服务器上创建文件夹
- phpstorm连接mysql
- 11n/11ac/11ax 速率速查表
- 计算两个数据的百分比
- 蚂蚁区块链BaaS平台架构与实践
- PHPMyWind5.4存储XSS(CVE-2017-12984)
- R语言使用t.test函数进行t检验、使用配对的t检验(paired)检验组间不独立数据的差异是否有统计学意义
- NodeBB – 基于 Node.js 的开源论坛系统
- matlab 自激振荡,基于Simulink的非线性系统自激振荡的仿真