Python守护进程实现过程详解


Posted in Python onFebruary 10, 2020

这篇文章主要介绍了Python守护进程实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性。即在线程开始(thread.start())之前,调用setDeamon()函数,设定线程的daemon标志。(thread.setDaemon(True))就表示这个线程“不重要”。

如果你想等待子线程完成再退出,那就什么都不用做,或者显示地调用thread.setDaemon(False),设置daemon的值为false。新的子线程会继承父线程的daemon标志。整个Python会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。

看下面的例子:

import time
import threading


def fun():
  print "start fun"
  time.sleep(2)
  print "end fun"
print "main thread"
t1 = threading.Thread(target=fun,args=())
#t1.setDaemon(True)
t1.start()
time.sleep(1)
print "main thread end"

结果:

main thread
start fun
main thread end
end fun

结论:程序在等待子线程结束,才退出了。

设置:setDaemon 为True

import time
import threading
def fun():
  print "start fun"
  time.sleep(2)
  print "end fun"

print "main thread"
t1 = threading.Thread(target=fun,args=())

t1.setDaemon(True)

t1.start()
time.sleep(1)
print "main thread end"

结果:

main thread
start fun
main thread end

结论:程序在主线程结束后,直接退出了。 导致子线程没有运行完。

守护进程可以通过调用isAlive(), 来监视其他线程是否是存活的。

如果死掉的话就重新建立一个工作线程,启动起来(这里要注意不能使用原来的线程让它start(),因为这个线程已经结束了,内存中的实例已经释放掉了,所以使用这个方法会报错)。

#coding=utf-8
import time
from threading import Thread
 
 
class ticker(Thread):
  def run(self):
    while True:
      print time.time()
      if (time.time() > 1470883000):
        break
        pass
      time.sleep(3)     
      pass
    pass
 
class moniter(Thread):
  def run(self):
    while True:
      global T
      if (T.isAlive()):
        print 't is alive'
      else :
        print 't is dead'
        T = ticker()
        T.start()
      print 'checking '
      time.sleep(5)
      pass
    pass
T = ticker()
T.start()
 
mo = moniter()
mo.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中requests模块的使用方法
Apr 08 Python
Python中标准模块importlib详解
Apr 16 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
pandas修改DataFrame列名的方法
Apr 08 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
关于python scrapy中添加cookie踩坑记录
Nov 17 Python
Python3 字典dictionary入门基础附实例
Feb 10 #Python
python列表返回重复数据的下标
Feb 10 #Python
Python中断多重循环的几种方式详解
Feb 10 #Python
django有外键关系的两张表如何相互查找
Feb 10 #Python
Django重设Admin密码过程解析
Feb 10 #Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 #Python
Python单元测试模块doctest的具体使用
Feb 10 #Python
You might like
PHP 实用代码收集
2010/01/22 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP数据过滤的方法
2013/10/30 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
JS限制输入框输入的实现代码
2018/07/02 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
查看Django和flask版本的方法
2018/05/14 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
经管应届生求职信范文
2014/05/18 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
2015中学学校工作总结
2015/07/20 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android