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备份文件的脚本
Aug 11 Python
Python中变量交换的例子
Aug 25 Python
python计算文本文件行数的方法
Jul 06 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
Django实战之用户认证(用户登录与注销)
Jul 16 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
详解python中的Turtle函数库
Nov 19 Python
解决pycharm运行出错,代码正确结果不显示的问题
Nov 30 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
python 消除 futureWarning问题的解决
Dec 25 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
Python模拟伯努利试验和二项分布代码实例
May 27 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 身份证号验证函数
2009/05/07 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
php短信接口代码
2016/05/13 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
jQuery 表格工具集
2010/04/25 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
python同时遍历两个list用法说明
2020/05/02 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
华为c/c++笔试题
2016/01/25 面试题
C#公司笔试题
2014/03/28 面试题
酒店端午节促销方案
2014/02/18 职场文书
残疾人小组计划书
2014/04/27 职场文书
中文专业求职信
2014/06/20 职场文书
委托书格式要求
2015/01/28 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
交通安全月活动总结
2015/05/08 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书