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实现自动添加脚本头信息的示例代码
Sep 02 Python
python开发利器之ulipad的使用实践
Mar 16 Python
使用python脚本实现查询火车票工具
Jul 19 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
Python使用字典的嵌套功能详解
Feb 27 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
tensorflow 查看梯度方式
Feb 04 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
Python 解析简单的XML数据
Jul 24 Python
python中os.path.join()函数实例用法
May 26 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代码
2006/12/06 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
javascript下string.format函数补充
2010/08/24 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python selenium文件上传方法汇总
2020/11/19 Python
python实现媒体播放器功能
2018/02/11 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
sort命令的作用和用法
2012/11/04 面试题
学前班教师的自我鉴定
2013/12/05 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
中学运动会广播稿
2014/01/19 职场文书
普通话演讲稿
2014/09/03 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
毕业论文致谢信
2015/05/14 职场文书
MySQL的join buffer原理
2021/04/29 MySQL