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阻塞的更多相关文章

  1. 015.4守护线程和join

    内容:守护线程.join方法#####################守护线程通过开启线程之前调用setDaemon()方法,变成后台线程,前台线程运行完,后台线程自动会结束#########例子 c ...

  2. join和 Daemon守护线程

    一.前言 一个程序至少有一个主线程,主线程启动子线程后,它们之间并没有隶属关系.主线程和子线程执行是并行的,相互独立.主线程执行完毕后默认不等子线程执行结束就接着往下走了,如果有其他程序就会运行另外的 ...

  3. python基础-守护进程、守护线程、守护非守护并行

    守护进程 1.守护子进程 主进程创建守护进程  其一:守护进程会在主进程代码执行结束后就终止  其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic pro ...

  4. 守护进程vs 守护线程

    # #守护进程 from multiprocessing import Process import os,time,random def task(): print('%s is running' ...

  5. Python 开启线程的2中方式,线程VS进程(守护线程、互斥锁)

    知识点一: 进程:资源单位 线程:才是CPU的执行单位 进程的运行: 开一个进程就意味着开一个内存空间,存数据用,产生的数据往里面丢 线程的运行: 代码的运行过程就相当于运行了一个线程 辅助理解:一座 ...

  6. 守护进程VS守护线程

    守护(daemon)进程 引入: join()方法可以使一个进程运行完之后再执行下一个进程,而daemon()方法就是主进程的代码执行完毕之后,不需要等待子进程,立即终止子进程. join()方法和d ...

  7. [Linux] 守护进程和守护线程

    对于JAVA而言,一般一个应用程序只有一个进程——JVM.除非在代码里面另外派生或者开启了新进程. 而线程,当然是由进程开启的.当开启该线程的进程离开时,线程也就不复存在了. 所以,对于JAVA而言, ...

  8. java 多线程:Thread类常用方法:setPriority优先级、interrupt中断标记、suspend暂停与唤醒resume(已过时);daemon守护线程

    常用方法: boolean isAlive() 测试此线程是否存活. boolean isDaemon() 测试此线程是否为守护程序线程. static void sleep?(long millis ...

  9. Java:多线程<四> Lock、停止线程、守护线程、join、优先级&yield

    Java1.5以后,Condition将Object监视器方法(wait, notify, notifyAll)分解成截然不同的对象,以便通过这些对象与任意Lock实现组合使用为每个对像提供多个等待s ...

随机推荐

  1. linux 关于redis-trib.rb构建redis集群

    之前搭建集群漏下的坑, 今次再搭一次. 环境 ruby环境 yum install ruby rubygems -y redis的gem环境 gem install redis-3.2.2.gem 部 ...

  2. linux上的文件服务

    主要的文件服务vsftp.Samba.NFS对比 服务器名称 用户客户端平台 使用范围 服务端口 VSFTP Windows/linux/unix/macOS等 发布网站,文件共享 Tcp/21 Sa ...

  3. java开发注意点之String使用equals和==的区别

    "=="操作符的作用 1.用于基本数据类型的比较 2.判断引用是否指向堆内存的同一块地址. equals所在位置: 在Object类当中,而Object是所有类的父类,包含在jdk ...

  4. java定时任务调度工具

    一.什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的时间执行次数自动执行的任务. 二.java中常用的定时任务调度工具: Timer Quartz 2.1两者区别: Timer源自jdk ...

  5. 一些常用的mysql语句实例-以后照写2

    specification: 规范, 规格, 产品规范, 产品规格, 技术规范, 产品说明书. 如: create_specification, 等等 创建数据库时, 显式地指明, 字符集: crea ...

  6. Centos 7 官网下载安装mysql server 5.6

    Centos 7 官网下载安装 mysql server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rp ...

  7. 论文笔记: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   ...

  8. RabbitMq的整理 exchange、route、queue关系

    https://blog.csdn.net/samxx8/article/details/47417133

  9. python bytes类型

    python3中二进制数据则由bytes类型表示,8位一字节 格式化打印文件的二进制编码 with open('spiderman.mkv', "rb") as f: print( ...

  10. C语言 分割字符串

    对指针的操作有点迷糊 只好采用下面一些比较low的手段 char str[100]; char delims[] = ";"; char *result = NULL; sprin ...