(4)进程---daemon守护线程和join阻塞
join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法
join 等待所有子进程执行完毕之后,主进程在向下执行
(1) 1个子进程通过join加阻塞,进行同步控制,放在主程序之前
(2)多个子进程通过join加阻塞,把进程加入列表,进行同步控制
#守护,无join
#------------------主线程运行正常结束,子线程强制结束--------------------------------#
#非守护,无join
#------------------主线程正常结束-----------子线程运行正常结束(结束顺序不一定)--------------------
#守护,join(阻塞)
#------------------子线程运行正常结束-----------主线程正常结束--------------------------------#
#非守护,join(阻塞)
#------------------子线程运行正常结束-----------主线程正常结束--------------------------------#
p.daemon = True#注意一个线程默认不是守护线程,也就是说默认值是False
#结论:
#☆☆☆对于含有join的代码而言,一定有主线程在子线程之后才执行完。
#☆☆☆对于没有join的代码而言:如果守护,只要主线程关闭,子线程及时没执行完也必须关闭,;
# 如果非守护,主线程与子线程结束顺序不一定
p.start()
# p.join()#(挡住,无法执行join以后的语句)
守护进程(daemon)
可以给子进程贴上守护进程的名字,该进程会随着主进程代码执行完毕而结束
(实际为主进程守护)
(1)守护进程会在主进程代码执行结束后就终止
(2)守护进程内无法再开启子进程,否则抛出异常(了解)
(3)正常情况下,主进程默认等待子进程全部结束而结束
(4)守护进程必须写在start之前进行设置
语法:
p.daemon = True
p.start()
(5) 当多个子进程并发执行时,默认主进程等待子进程
守护进程 守护的是 主进程 , 主要主进程里面的代码执行完毕
对应是守护进程的那个子进程立即终止,其他非守护进程继续
守护进程是主进程的代码执行到最后一行了,即为结束。
(6) 守护进程的实际用途:报活
如果最大的监控系统挂掉,就让其他服务器停掉
就好比厂子倒闭了,员工回家放假
import time
from multiprocessing import Process def alive():
while True:
print('1号主机发送日志消息,iam ok!')
time.sleep(5)
def func():
while True:
print('统计各个主机的系统日志,维护数据库管理')
time.sleep(5)
if __name__ == '__main__':
p = Process(target=alive)
p.daemon = True
p.start()
p = Process(target=func)
p.start()
p.join() # 加上join之后,等待所有子进程执行完毕后,在运行主进程后面的代码
print('............')
1号主机发送日志消息,iam ok!
统计各个主机的系统日志,维护数据库管理
1号主机发送日志消息,iam ok!
统计各个主机的系统日志,维护数据库管理
1号主机发送日志消息,iam ok!
统计各个主机的系统日志,维护数据库管理
1号主机发送日志消息,iam ok!
统计各个主机的系统日志,维护数据库管理
1号主机发送日志消息,iam ok!
统计各个主机的系统日志,维护数据库管理
1号主机发送日志消息,iam ok!
统计各个主机的系统日志,维护数据库管理
(4)进程---daemon守护线程和join阻塞的更多相关文章
- 015.4守护线程和join
内容:守护线程.join方法#####################守护线程通过开启线程之前调用setDaemon()方法,变成后台线程,前台线程运行完,后台线程自动会结束#########例子 c ...
- join和 Daemon守护线程
一.前言 一个程序至少有一个主线程,主线程启动子线程后,它们之间并没有隶属关系.主线程和子线程执行是并行的,相互独立.主线程执行完毕后默认不等子线程执行结束就接着往下走了,如果有其他程序就会运行另外的 ...
- python基础-守护进程、守护线程、守护非守护并行
守护进程 1.守护子进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic pro ...
- 守护进程vs 守护线程
# #守护进程 from multiprocessing import Process import os,time,random def task(): print('%s is running' ...
- Python 开启线程的2中方式,线程VS进程(守护线程、互斥锁)
知识点一: 进程:资源单位 线程:才是CPU的执行单位 进程的运行: 开一个进程就意味着开一个内存空间,存数据用,产生的数据往里面丢 线程的运行: 代码的运行过程就相当于运行了一个线程 辅助理解:一座 ...
- 守护进程VS守护线程
守护(daemon)进程 引入: join()方法可以使一个进程运行完之后再执行下一个进程,而daemon()方法就是主进程的代码执行完毕之后,不需要等待子进程,立即终止子进程. join()方法和d ...
- [Linux] 守护进程和守护线程
对于JAVA而言,一般一个应用程序只有一个进程——JVM.除非在代码里面另外派生或者开启了新进程. 而线程,当然是由进程开启的.当开启该线程的进程离开时,线程也就不复存在了. 所以,对于JAVA而言, ...
- java 多线程:Thread类常用方法:setPriority优先级、interrupt中断标记、suspend暂停与唤醒resume(已过时);daemon守护线程
常用方法: boolean isAlive() 测试此线程是否存活. boolean isDaemon() 测试此线程是否为守护程序线程. static void sleep?(long millis ...
- Java:多线程<四> Lock、停止线程、守护线程、join、优先级&yield
Java1.5以后,Condition将Object监视器方法(wait, notify, notifyAll)分解成截然不同的对象,以便通过这些对象与任意Lock实现组合使用为每个对像提供多个等待s ...
随机推荐
- linux 关于redis-trib.rb构建redis集群
之前搭建集群漏下的坑, 今次再搭一次. 环境 ruby环境 yum install ruby rubygems -y redis的gem环境 gem install redis-3.2.2.gem 部 ...
- linux上的文件服务
主要的文件服务vsftp.Samba.NFS对比 服务器名称 用户客户端平台 使用范围 服务端口 VSFTP Windows/linux/unix/macOS等 发布网站,文件共享 Tcp/21 Sa ...
- java开发注意点之String使用equals和==的区别
"=="操作符的作用 1.用于基本数据类型的比较 2.判断引用是否指向堆内存的同一块地址. equals所在位置: 在Object类当中,而Object是所有类的父类,包含在jdk ...
- java定时任务调度工具
一.什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的时间执行次数自动执行的任务. 二.java中常用的定时任务调度工具: Timer Quartz 2.1两者区别: Timer源自jdk ...
- 一些常用的mysql语句实例-以后照写2
specification: 规范, 规格, 产品规范, 产品规格, 技术规范, 产品说明书. 如: create_specification, 等等 创建数据库时, 显式地指明, 字符集: crea ...
- Centos 7 官网下载安装mysql server 5.6
Centos 7 官网下载安装 mysql server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rp ...
- 论文笔记:ReNet: A Recurrent Neural Network Based Alternative to Convolutional Networks
ReNet: A Recurrent Neural Network Based Alternative to Convolutional Networks2018-03-05 11:13:05 ...
- RabbitMq的整理 exchange、route、queue关系
https://blog.csdn.net/samxx8/article/details/47417133
- python bytes类型
python3中二进制数据则由bytes类型表示,8位一字节 格式化打印文件的二进制编码 with open('spiderman.mkv', "rb") as f: print( ...
- C语言 分割字符串
对指针的操作有点迷糊 只好采用下面一些比较low的手段 char str[100]; char delims[] = ";"; char *result = NULL; sprin ...