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的ORM框架SQLObject入门实例
Apr 28 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
基于python绘制科赫雪花
Jun 22 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
PyQt5实现简易计算器
May 30 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
Pytorch转tflite方式
May 25 Python
pytorch中的weight-initilzation用法
Jun 24 Python
学习Python需要哪些工具
Sep 04 Python
Python 键盘事件详解
Nov 11 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
15种PHP Encoder的比较
2007/03/06 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
JavaScript中的Document文档对象
2008/01/16 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
python3 读写文件换行符的方法
2018/04/09 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python可视化实现KNN算法
2019/10/16 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
python GUI计算器的实现
2020/10/09 Python
美国旅游网站:Tours4Fun
2017/02/17 全球购物
事业单位鉴定材料
2014/05/25 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
单位工资证明范本
2015/06/12 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
装修安全责任协议书
2016/03/22 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python
vue组件vue-esign实现电子签名
2022/04/21 Vue.js