python第九天(9-33)

  

一:进程

  • 进程概念
    • 进程就是一个程序运行在一个数据集上的一次动态执行过程
    • 进程一般由程序,数据集,进程控制块组成
    • 进程控制块: 进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志(通俗讲就是记录进程状态信息)

二:线程

  • 线程概念
    • 一个程序至少有一个进程,一个进程至少有一个线程
    • 线程是进程的组成部分,线程是最小的执行单位
    • 进程相当于一个容器,是最小的资源单位
    • 线程共用进程的资源,线程是进程中的一个实体
    • 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成
    • 一个线程可以创建和撤消另一个线程

一:线程的创建与调用(threading中Thread类)

  • 创建一个主线程的子线程对象
    • t1=threading.Thread(target=read)
    • target:指向函数,arg:传递函数参数
  • 启用一个子线程
    • t1.start()
    • 实际start()只是让线程处于就绪态,开始一个线程时run()方法实现的  
 1 import threading2 import time3 def read():4     print("I am reading at %s"%time.ctime())5     time.sleep(3)6     print("i am finish reading at %s"%time.ctime())7 def music():8     print("i am listening music at %s"%time.ctime())9     time.sleep(3)
10     print("i am finish listening music at %s"%time.ctime())
11 if __name__=="__main__":
12     t1=threading.Thread(target=read)#创建这个程序的主线程的子线程对象
13     #target:指向调用的函数,arg用于传递函数中的参数
14     t1.start()#启用某个线程
15     t2=threading.Thread(target=music)
16     t2.start()
线程执行的理解

 

1.首先t1,t2与主线程开启,直接输出
I am reading at Thu Jan 31 12:20:38 2019
I am listening music at Thu Jan 31 12:20:38 2019
Main threading ending at Thu Jan 31 12:20:38 2019...2.俩个进程等待三秒钟
3.最后输出
I am finish listening music at Thu Jan 31 12:20:41 2019
I am finish reading at Thu Jan 31 12:20:41 2019

二:join的用法理解

 1 import threading2 import time3 def read():4     print("I am reading at %s"%time.ctime(),end="\n")5     time.sleep(3)6     print("I am finish reading at %s"%time.ctime(),end="\n")7 def music():8     print("I am listening music at %s"%time.ctime())9     time.sleep(5)
10     print("I am finish listening music at %s"%time.ctime(),end="\n")
11 if __name__=="__main__":
12     t1=threading.Thread(target=read)#创建这个程序的主线程的子线程对象
13     #target:指向调用的函数,arg用于传递函数中的参数
14     t2=threading.Thread(target=music)
15     t1.start()  # 启用某个线程
16     t2.start()
17     #t1.join()
18     t2.join()
19     print(r"main threading ending at %s..."%time.ctime())
join用法的理解
  • 没有join时,主线程开子线程一起执行
  • 注释掉t2.join()          
      • 1.执行t1,t2子线程I am reading at Thu Jan 31 13:09:39 2019I am listening music at Thu Jan 31 13:09:39 2019
        2.进入等待3秒钟
        3.执行t1子线程和主线程I am finish reading at Thu Jan 31 13:09:42 2019
          main threading ending at Thu Jan 31 13:09:44 2019... 4.进入等待俩秒钟 5。执行t2I am finish listening music at Thu Jan 31 13:09:44 2019
  • 注释掉t1.join
      • 1.执行t1,t2子线程I am reading at Thu Jan 31 13:20:50 2019I am listening music at Thu Jan 31 13:20:50 2019
        2.进入等待5秒钟,单线程1只需等待三秒钟,所以在三秒钟时会继续执行ti线程I am finish reading at Thu Jan 31 13:20:53 2019
        3.在三秒钟后在过俩秒钟执行t2和主线程I am finish listening music at Thu Jan 31 13:23:28 2019main threading ending at Thu Jan 31 13:23:28 2019...          
  • 都不注释
      • 1.执行t1,t2子线程I am reading at Thu Jan 31 13:26:55 2019I am listening music at Thu Jan 31 13:26:55 2019
        2,进入等待5秒,在第三秒执行t1I am finish reading at Thu Jan 31 13:26:58 2019
        3.再过俩秒执行t2和主线程I am finish listening music at Thu Jan 31 13:27:00 2019main threading ending at Thu Jan 31 13:27:00 2019...

三:总结

  在没有join时,主线程会与子线程同时执行,但当子线程有了设置了join时,主线程会等待带有join的子线程执行完毕再结束,如果一个进程的join设置再另一个线程开始之前,后者会在前者执行完毕再执行,如果是x.start+x.join+x1.start+x1.join。。。这种格式就成了穿行

 

  • 守护线程的概念
    • 只要主线程完成了,不管守护子线程是否完成,都要和主线程一起退出,整个Python会在所有的非守护线程结束后才会结束,即进程中没有非守护线程存在的时候才结束

  • setDaemon方法实例理解

 

 1 import threading
 2 import time
 3 def read():
 4     print("I am reading at %s"%time.ctime(),end="\n")
 5     time.sleep(3)
 6     print("I am finish reading at %s"%time.ctime(),end="\n")
 7 def music():
 8     print("I am listening music at %s"%time.ctime())
 9     time.sleep(5)
10     print("I am finish listening music at %s"%time.ctime(),end="\n")
11 if __name__=="__main__":
12     t1=threading.Thread(target=read)
13     t2=threading.Thread(target=music)
14     t1.setDaemon(True)
15     t1.start() 
16     t2.start()
17     print(r"main threading ending at %s..."%time.ctime())
View Code
一.设置t1为守护线程是看不到效果的,因为,主进程在所有非守护线程结束了才会结束
二:设置t2为守护线程1.首先执行t1,t2和主线程执行结果: I am reading at Fri Feb  1 20:28:58 2019I am listening music at Fri Feb  1 20:28:58 2019main threading ending at Fri Feb  1 20:28:58 2019...2.由于主线程会在所有非守护线程结束后才结束,所以非守护线程t1在3秒后结束,从而主线程结束,t2被迫结束执行结果:I am finish reading at Fri Feb  1 20:29:01 2019Process finished with exit code 0        

 

# run():  线程被cpu调度后自动执行线程对象的run方法
# start():启动线程活动。
# isAlive(): 返回线程是否活动的。
# getName(): 返回线程名。
# setName(): 设置线程名。threading模块提供的一些方法:
# threading.currentThread(): 返回当前的线程变量。
      #<_MainThread(MainThread, started 14428)>#输出的主线程名字MainThread # threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
      #[<_MainThread(MainThread, started 13548)>, <Thread(Thread-1, started 10348)>, <Thread(Thread-2, started 18144)>]
      #从这里可以发现主线程实在所有线程结束后才结束
# threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

最后补充一下线程的类调用方法 https://www.cnblogs.com/yuanchenqi/articles/6248025.html 

 

    

 

    

 

 

         

 

转载于:https://www.cnblogs.com/Mr-l/p/10337443.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 数据类型--Bytes类型

一、Bytes类型 在Python3以后&#xff0c;字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的&#xff0c;bytes类型是以字节为单位处理的。 bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样&#xff0c;也是不可变的序列对象。 bytes对象只…

文件结构

C语言文件名命名的规则 1、文件标识符分为两部分&#xff0c;即文件名前缀和后缀。文件名前缀的最前面要使用范围限定符——模块名&#xff08;文件名&#xff09;缩写。 2、采用小写字母命名文件&#xff0c;避免使用一些比较通俗的文件名&#xff0c;如&#xff1a;publi…

POJ 1187 陨石的秘密 (线性DP)

题意&#xff1a; 公元11380年&#xff0c;一颗巨大的陨石坠落在南极。于是&#xff0c;灾难降临了&#xff0c;地球上出现了一系列反常的现象。当人们焦急万分的时候&#xff0c;一支中国科学家组成的南极考察队赶到了出事地点。经过一番侦察&#xff0c;科学家们发现陨石上刻…

bzoj2561 最小生成树

题意&#xff1a;给你无向图&#xff0c;给定一条边&#xff0c;求至少在原图中删去多少边才能使它同时在某个最大生成树和某个最小生成树中。 解&#xff1a; 假装我们把边排序了&#xff0c;然后把所有边权小于给定边的边都加进去了。 那么我们要删的就是s到t的一个割。 最大…

robotframework基础学习(8)

变量的使用 在 Edit 标签页中主要分&#xff1a;加载外部文件、定义内部变量、定义元数据等三个部分。 &#xff08;1&#xff09;&#xff1a;加载外部文件Add Library&#xff1a;加载测试库&#xff0c;主要是[PYTHON 目录]\Lib\site-packages 里的测试库 Add Resource&…

[蓝桥杯]ALGO-188.算法训练_P0504

Anagrams指的是具有如下特性的两个单词&#xff1a;在这两个单词当中&#xff0c;每一个英文字母&#xff08;不区分大小写&#xff09;所出现的次数都是相同的。例如&#xff0c;Unclear和Nuclear、Rimon和MinOR都是Anagrams。编写一个程序&#xff0c;输入两个单词&#xff0…

beta第二天

团队成员 郑西坤 031602542 &#xff08;队长&#xff09; 陈俊杰 031602504陈顺兴 031602505张胜男 031602540廖钰萍 031602323雷光游 031602319吴志鸿 0316206341.昨天的困难 陈顺兴&#xff1a;无 廖钰萍&#xff1a;无 吴志鸿&#xff1a;没有 雷光游&#xff1a;无 郑西坤…

C语言符号

C语言运算符的优先级 一、运算符的优先级表 C 语言的符号众多&#xff0c;由这些符号又组合成了各种各样的运算符。既然是运算符就一定有其特定的优先级&#xff0c;下表就是C 语言运算符的优先级表&#xff1a; 注&#xff1a;同一优先级的运算符&#xff0c;运算次序由结合…

burp过期了,换一个

先从吾爱破解论坛下载工具&#xff1a;https://down.52pojie.cn/Tools/Network_Analyzer/Burp_Suite_Pro_v1.7.37_Loader_Keygen.zip 工具运行需要Java环境&#xff0c;请自行安装&#xff0c;此处不赘述。解压完后双击keygen 填一下License Text(随意)&#xff0c;然后点击Run…

hbase 概念

在hbase里面有几个通俗的名称会经常出现 1&#xff09;Hregion region 2&#xff09;Hregionserver regionserver 3&#xff09;Hmaster master 4&#xff09;Hmamstore memstore 5&#xff09;Hfile storeFile 1、什么是hbase&#xff1f; 1&#xff09;它是基于稀疏的、…

beta冲刺第三天

团队成员 郑西坤 031602542 &#xff08;队长&#xff09; 陈俊杰 031602504陈顺兴 031602505张胜男 031602540廖钰萍 031602323雷光游 031602319吴志鸿 0316206341.昨天的困难 陈顺兴&#xff1a;理解别人的代码 廖钰萍&#xff1a; 吴志鸿&#xff1a;无 雷光游&#xff1a; …

模块化

我那进了"模块化研究"小组.所以嘞.研究模块化以及如何让项目的模块化更加合理和高效是我们小组的主要目的.首先&#xff0c;在实行模块化之前,得先巩固模块化开发的理论基础,因为理论是实践的基础。只有这样&#xff0c;在过程中理论与实践相结合,才有可能达到最满意…

1566:基础练习 十六进制转八进制

题目地址&#xff1a;https://acmore.cc/problem/LOCAL/1566 1 #include <iostream>2 #include <string>3 4 using namespace std;5 6 string HexToBin(string s) //16进制转2进制7 {8 string str "";9 for (int i 0; i < s.size(); i) 10…

java命令--jmap命令使用(查找内存泄漏对象)

转自&#xff1a;https://www.cnblogs.com/kongzhongqijing/articles/3621163.html jdk安装后会自带一些小工具&#xff0c;jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。 jmap命令可以获得运行…

tr069相关协议说明

截图自easycwmp官网&#xff1a;http://easycwmp.org/转载于:https://www.cnblogs.com/kiss-passion/p/10362029.html

Beta 冲刺(6/7)

队名 火箭少男100组长博客 林燊大哥作业博客 Beta 冲鸭鸭鸭&#xff01;成员冲刺阶段情况 林燊&#xff08;组长&#xff09; 过去两天完成了哪些任务 协调组内工作最终测试文稿编写展示GitHub当日代码/文档签入记录(组内共享)接下来的计划 协助开发组完成标签制作展示视频制作…

Android Bluetooth BLE相关开发资源汇总

Android开启蓝牙开关 转载自Android&#xff1a;Bluetooth 的打开和关闭 检查系统蓝牙是否开启 BluetoothManager bluetoothManager (BluetoothManager) this. getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter mBluetoothAdapter bluetoothManager.getAdapt…

git常用命令及冲突解决

2019独角兽企业重金招聘Python工程师标准>>> git常用命令 git config --global user.name chenhongjiang git config --global user.email 123qq.com git init 建立厂库 git status 查看状态 git add . 添加当前目录 git add a.php 添加文件…

从零开始学习PYTHON3讲义(二)把Python当做计算器

《从零开始PYTHON3》第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境&#xff0c;macOS/Linux都可以在命令行执行idle3。Windows则从开始菜单中去寻找IDLE程序的图标。 上一讲我们还见到了Python的两种工作模式&#xff0c;交互模式和程序模式。 通常在一个大型的…

创业者谈:畏惧失败,但也要拥抱失败

摘要&#xff1a;本文作者为Paydirt创始人Tristan Gamilis&#xff0c;他在文中分享了如何面对创业过程中的失败。作为一个创业者&#xff0c;开始的时候并非全才&#xff0c;很多知识都是经历了创业中的失败&#xff0c;摸爬滚打之后才学会的。所以&#xff0c;我们在创业过程…