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 相关文章推荐
浅谈机器学习需要的了解的十大算法
Dec 15 Python
Python模块WSGI使用详解
Feb 02 Python
使用Python从零开始撸一个区块链
Mar 14 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
python实现求纯色彩图像的边框
Apr 08 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
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
js类 from qq
2006/11/13 Javascript
javascript之锁定表格栏位
2007/06/29 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
python相似模块用例
2016/03/04 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
logging level级别介绍
2020/02/21 Python
Python读取yaml文件的详细教程
2020/07/21 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
大学生职业规划书的范本
2014/02/18 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
企业委托书范本
2014/09/13 职场文书
2014国庆节标语口号
2014/09/19 职场文书
公司周年庆典标语
2014/10/07 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS