Python守护进程实现过程详解

 更新时间:2020年02月10日 14:11:21   作者:xushukui  
这篇文章主要介绍了Python守护进程实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • PyTorch使用GPU加速计算的实现

    PyTorch使用GPU加速计算的实现

    PyTorch利用NVIDIA CUDA库提供的底层接口来实现GPU加速计算,本文就来介绍一下PyTorch使用GPU加速计算的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Python代码调试Debug的实用技巧分享

    Python代码调试Debug的实用技巧分享

    我们日常写代码过程中,难免会写出各类错误,这些错误可能是语法错误、逻辑错误或运行时错误,所以本文为大家分享了一些Python调试Debug的技巧,感兴趣的可以了解下
    2024-11-11
  • PyTorch中torch.matmul()函数常见用法总结

    PyTorch中torch.matmul()函数常见用法总结

    torch.matmul()也是一种类似于矩阵相乘操作的tensor连乘操作。但是它可以利用python中的广播机制,处理一些维度不同的tensor结构进行相乘操作,这篇文章主要介绍了PyTorch中torch.matmul()函数用法总结,需要的朋友可以参考下
    2023-04-04
  • Python PaddlePaddle机器学习之求解线性模型

    Python PaddlePaddle机器学习之求解线性模型

    这篇文章主要介绍了Python PaddlePaddle机器学习之求解线性模型,文章围绕主题展开详细的内容介绍,具有一定参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • 解读opencv中cv2.imread()返回值为None问题及解决

    解读opencv中cv2.imread()返回值为None问题及解决

    这篇文章主要介绍了解读opencv中cv2.imread()返回值为None问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)

    Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)

    这篇文章主要介绍了Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量实例,非常好的一个学习SQLAlchemy的教程,需要的朋友可以参考下
    2014-05-05
  • 用python实现一个让人戒不掉的百变款消消乐

    用python实现一个让人戒不掉的百变款消消乐

    消消乐的热门程度几乎赶上王者荣耀,你是否也有收到过好友邀请你帮解锁关卡的时候,今天小编带你用python编写一个自己的消消乐升级版,同学请往下看
    2021-09-09
  • Python编程二分法实现冒泡算法+快速排序代码示例

    Python编程二分法实现冒泡算法+快速排序代码示例

    这篇文章主要介绍了Python编程二分法实现冒泡算法+快速排序代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 关于python安装第三方库的问题与解决方案

    关于python安装第三方库的问题与解决方案

    Python开发中经常遇到第三方库安装困难的问题,速度慢可以使用国内镜像如清华镜像加速,若遇到wheel错误,可以手动下载whl文件进行安装,对于找不到的包,可以尝试在Python的官方包发布网站上进行搜索和下载,本文提供了具体的解决方案和操作步骤
    2024-10-10
  • python logging模块的分文件存放详析

    python logging模块的分文件存放详析

    这篇文章主要介绍了python logging模块的分文件存放详析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07

最新评论