python第九天(9-33)
一:进程
- 进程概念
- 进程就是一个程序运行在一个数据集上的一次动态执行过程
- 进程一般由程序,数据集,进程控制块组成
- 进程控制块: 进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志(通俗讲就是记录进程状态信息)
二:线程
- 线程概念
一:线程的创建与调用(threading中Thread类)
- 创建一个主线程的子线程对象
- t1=threading.Thread(target=read)
- target:指向函数,arg:传递函数参数
- 启用一个子线程
- t1.start()
- 实际start()只是让线程处于就绪态,开始一个线程时run()方法实现的
1 import threading
2 import time
3 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 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 #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 2019
I 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。执行t2
I 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 2019
I 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 2019
main threading ending at Thu Jan 31 13:23:28 2019...
- 都不注释
1.执行t1,t2子线程
I am reading at Thu Jan 31 13:26:55 2019
I am listening music at Thu Jan 31 13:26:55 2019
2,进入等待5秒,在第三秒执行t1
I 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 2019
main threading ending at Thu Jan 31 13:27:00 2019...
三:总结
在没有join时,主线程会与子线程同时执行,但当子线程有了设置了join时,主线程会等待带有join的子线程执行完毕再结束,如果一个进程的join设置再另一个线程开始之前,后者会在前者执行完毕再执行,如果是x.start+x.join+x1.start+x1.join。。。这种格式就成了穿行
- 守护线程的概念
只要主线程完成了,不管守护子线程是否完成,都要和主线程一起退出,整个Python会在所有的非守护线程结束后才会结束,即进程中没有非守护线程存在的时候才结束
- setDaemon方法实例理解
import threading
import time
def read():
print("I am reading at %s"%time.ctime(),end="\n")
time.sleep()
print("I am finish reading at %s"%time.ctime(),end="\n")
def music():
print("I am listening music at %s"%time.ctime())
time.sleep()
print("I am finish listening music at %s"%time.ctime(),end="\n")
if __name__=="__main__":
t1=threading.Thread(target=read)
t2=threading.Thread(target=music)
t1.setDaemon(True)
t1.start()
t2.start()
print(r"main threading ending at %s..."%time.ctime())
一.设置t1为守护线程是看不到效果的,因为,主进程在所有非守护线程结束了才会结束
二:设置t2为守护线程
1.首先执行t1,t2和主线程
执行结果:
I am reading at Fri Feb 1 20:28:58 2019
I am listening music at Fri Feb 1 20:28:58 2019
main 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 2019
Process 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
python第九天(9-33)的更多相关文章
- Python第九课学习
Python第九课学习 数据结构: 深浅拷贝 集合set 函数: 概念 创建 参数 return 定义域 www.cnblogs.com/yuanchenqi/articles/5782764.htm ...
- 《笨方法学Python》加分题33
while-leep 和我们接触过的 for-loop 类似,它们都会判断一个布尔表达式的真伪.也和 for 循环一样我们需要注意缩进,后续的练习会偏重这方面的练习.不同点在于 while 循环在执行 ...
- python第九天----今天来晚了!
作业 1. HAproxy配置文件操作1. 根据用户输入输出对应的backend下的server信息2. 可添加backend 和sever信息3. 可修改backend 和sever信息4. 可删除 ...
- Python第九章模块和包(2)
1.如果文件下没有__init__.py文件,程序将不会认为这是一个Python的包. 2.如果要使用from 包 import * 则需要 这样做. 是模块中包含 方法 的文件没有包含类: # ...
- Python第九章模块和包
1.import Python文件的时候文件名不能跟Python中自带的关键字重复,否则无法使用关键字的方法. 2.Reload(),重载例子 import sysreload(sys)sys.set ...
- Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作
Mysql操作: grant select,insert,update,delete on *.* to root@"%" Identified by "123456&q ...
- 我的第一个python web开发框架(33)——接口代码重构
前面ORM模块我们已经完成了开发,接下来要做的就是对项目代码进行重构了.因为对底层数据库操作模块(db_helper.py)进行了改造,之前项目的接口代码全都跑不起来了. 在写ORM模块时,我们已经对 ...
- python第九章:面向对象--小白博客
面向对象介绍 一.面向对象和面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点 ...
- python全栈开发 * 33 知识点汇总 * 180718
33 udp协议编码 显示客户端名字,输出带颜色的内容 udp协议的时间同步机制 #一.udp 协议编码 一个服务器,多个客户端#服务器:# import socket# sk=socket.sock ...
- python第九十六天 ---Django(1)
django 模块 一 安装: pip3 install django 或 python -m pip install django 二 添加环境变量 相关命令: #cmd 下 django-ad ...
随机推荐
- json 百分比转化
NumberFormat number = NumberFormat.getPercentInstance(); number.setMaximumFractionDigits(0);//设置小数点后 ...
- Python基础知识3-函数、参数及参数解构
函数 函数定义.调用 函数参数 函数参数默认参数 函数参数默认值 可变参数 keyword-only参数 可变参数和参数默认值 函数参数 参数解构 练习: #编写一个函数,能够接受至少2个参数 def ...
- 【XSY2903】B 莫比乌斯反演
题目描述 有一个\(n\times n\)的网格,除了左下角的格子外每个格子的中心里都有一个圆,每个圆的半径为\(R\),问你在左下角的格子的中心能看到多少个圆. \(n\leq {10}^9,R_0 ...
- 使用Sublime Text 3进行Markdown编辑+实时预览
使用Sublime Text 3进行Markdown编辑+实时预览 安装软件包管理器 打开Sublime Text 3 同时按下 ctrl+` ,窗口底部出现一个小控制台 复制以下代码,粘贴到控制台的 ...
- react-native命令行打包APK报错
我是根据react-native官网进行的react-native打包APK 我的步骤为 第一步就是生成密钥 第二步就是将密钥拷入 第三步:在\android\gradle.properties写入 ...
- LVM备份(3)- pg_dumpall
- MTD下的Nand驱动
目录 MTD下的Nand驱动 引入 平台设备资源文件 关键数据结构 平台框架 s3c24xx_nand_probe nand_scan s3c2410_nand_add_partition add_m ...
- JavaScript数据类型 Boolean布尔类型
前言 布尔值Boolean类型可能是三种包装对象Number.String和Boolean中最简单的一种.Number和String对象拥有大量的实例属性和方法,Boolean却很少.从某种意义上说, ...
- [物理学与PDEs]第2章第5节 一维流体力学方程组的 Lagrange 形式 5.2 Lagrange 坐标
1. Lagrange 坐标 $$\beex \bea &\quad 0=\int_\Omega\cfrac{\p \rho}{\p t}+\cfrac{\p}{\p x}(\rho u)\r ...
- SSH框架之hibernate《三》
Hibernate03 一.多表设计 1.1多表设计的总则 问题:我们为什么要学习多表映射? 答: ...