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 isinstance判断对象类型
Sep 06 Python
python实现自动登录人人网并访问最近来访者实例
Sep 26 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
Python批量转换文件编码格式
May 17 Python
python中set常用操作汇总
Jun 30 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python实现抖音视频批量下载
Jun 20 Python
python得到windows自启动列表的方法
Oct 14 Python
python调用动态链接库的基本过程详解
Jun 19 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 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 session 检测和注销
2009/03/16 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
jquery使用经验小结
2015/05/20 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
js微信支付实现代码
2016/12/22 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
python绘图模块之利用turtle画图
2021/02/12 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
护理自荐信
2013/10/22 职场文书
经典团队口号
2014/06/06 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
通知函格式范文
2015/04/27 职场文书
房产电话营销开场白
2015/05/29 职场文书
跳高加油稿
2015/07/21 职场文书
Python中三种花式打印的示例详解
2022/03/19 Python