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二叉树的实现实例
Nov 21 Python
Python实现堆排序的方法详解
May 03 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
python [:3] 实现提取数组中的数
Nov 27 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 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
学习使用PHP数组
2006/10/09 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
python的faker库用法
2019/11/28 Python
python中数据库like模糊查询方式
2020/03/02 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
Python request中文乱码问题解决方案
2020/09/17 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
毕业生简单求职信
2013/11/19 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
双方协议书
2014/04/22 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
预防煤气中毒方案
2014/06/16 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
商业门面租房协议书
2014/11/25 职场文书
体育教师个人工作总结
2015/02/09 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python