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字符串连接方法分析
Apr 12 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
pip命令无法使用的解决方法
Jun 12 Python
python GUI实现小球满屏乱跑效果
May 09 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
如何在Django配置文件里配置session链接
Aug 06 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
python pandas移动窗口函数rolling的用法
Feb 29 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
Python实现SMTP邮件发送
2020/06/16 Python
Python如何解除一个装饰器
2020/08/07 Python
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
如何选择使用结构还是类
2014/05/30 面试题
捐书倡议书
2014/08/29 职场文书
师德师风的心得体会
2014/09/02 职场文书
五心教育心得体会
2014/09/04 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
2014最新实习证明模板
2014/10/02 职场文书
防灾减灾标语
2014/10/07 职场文书
单位婚育证明范本
2014/11/21 职场文书
铁人观后感
2015/06/16 职场文书