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绘图方法实例入门
May 19 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
TensorFlow实现简单卷积神经网络
May 24 Python
pandas数据集的端到端处理
Feb 18 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
基于django micro搭建网站实现加水印功能
May 22 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
Python经典五人分鱼实例讲解
Jan 04 Python
Python竟然能剪辑视频
May 25 Python
python基础之类方法和静态方法
Oct 24 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
php 移除数组重复元素的一点说明
2008/11/27 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php常用hash加密函数
2014/11/22 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
Python新手实现2048小游戏
2015/03/31 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
python可迭代对象去重实例
2020/05/15 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
领导干部贪图享乐整改措施
2014/09/21 职场文书
店铺转让协议书
2014/12/02 职场文书
中学生自我评价2015
2015/03/03 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript