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微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
Pandas中resample方法详解
Jul 02 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
基于Django统计博客文章阅读量
Oct 29 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
pandas处理csv文件的方法步骤
Oct 16 Python
Pycharm plot独立窗口显示的操作
Dec 11 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
学生打架检讨书1000字
2014/01/16 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
大学校园招聘会感想
2015/08/10 职场文书
nginx共享内存的机制详解
2022/03/21 Servers
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL