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 06 Python
python调用windows api锁定计算机示例
Apr 17 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
Python监控主机是否存活并以邮件报警
Sep 22 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
Python中常见的导入方式总结
May 06 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删除数组中特定元素的两种方法
2013/07/02 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
js 文件引入实现代码
2010/04/23 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
编写Python的web框架中的Model的教程
2015/04/29 Python
python开发简易版在线音乐播放器
2017/03/03 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
python实现静态web服务器
2019/09/03 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
办公室主任先进事迹
2014/01/18 职场文书
企业内部培训方案
2014/02/04 职场文书
名人演讲稿范文
2014/09/16 职场文书
煤矿安全保证书
2015/02/27 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
MySQL优化及索引解析
2022/03/17 MySQL
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python