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实现监控windows服务并自动启动服务示例
Apr 17 Python
Python中为什么要用self探讨
Apr 14 Python
python删除特定文件的方法
Jul 30 Python
python简单实现操作Mysql数据库
Jan 29 Python
python实现Flappy Bird源码
Dec 24 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
Django工程的分层结构详解
Jul 18 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
Pytorch之parameters的使用
Dec 31 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
Python基于pillow库实现生成图片水印
Sep 14 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+javascript模拟Matrix画面
2006/10/09 PHP
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
python3编码问题汇总
2016/09/06 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
Python模块搜索路径代码详解
2018/01/29 Python
python对象与json相互转换的方法
2019/05/07 Python
python设置环境变量的原因和方法
2019/06/24 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
Python-split()函数实例用法讲解
2020/12/18 Python
节能环保标语
2014/06/12 职场文书
促销活动总结怎么写
2014/06/25 职场文书
建筑横幅标语
2014/10/09 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
Oracle中日期的使用方法实例
2022/07/07 Oracle