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之关于类的初步认识
Oct 11 Python
python sort、sorted高级排序技巧
Nov 21 Python
python列表的增删改查实例代码
Jan 30 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
python pandas修改列属性的方法详解
Jun 09 Python
python实现反转部分单向链表
Sep 27 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 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 Pear 安装及使用
2009/03/19 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
php微信支付之APP支付方法
2015/03/04 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
详谈js模块化规范
2017/07/07 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
PyQt 线程类 QThread使用详解
2017/07/16 Python
利用python实现AR教程
2019/11/20 Python
python3 求约数的实例
2019/12/05 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
python 操作excel表格的方法
2020/12/05 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
英语教师岗位职责
2014/03/16 职场文书
中国好声音广告词
2014/03/18 职场文书
毕业生就业协议书
2014/04/11 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
升学宴学生致辞
2015/07/27 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
MySQL开启事务的方式
2021/06/26 MySQL