python 如何设置守护进程

上一篇文章 介绍 join 在多进程中的作用,本文继续学习设置守护进程的对程序的影响。(Python大牛可以绕行)

我们通过两个例子说明

# encoding: utf-8
"""
author: yangyi@youzan.com
time: 2019/7/30 11:20 AM
func:
"""
from multiprocessing import Process
import os
import time

def now():
  return str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

def func_1(name):
  print(now() + ' Run child process %s ,pid is %s...' % (name, os.getpid()))
  time.sleep(2)
  print(now() + ' Stop child process %s ,pid is %s...' % (name, os.getpid()))

def func_2(name):
  print(now() + ' Run child process %s , pid is %s...' % (name, os.getpid()))
  time.sleep(4)
  print(now() + ' hello world!')
  print(now() + ' Stop child process %s , pid is %s...' % (name, os.getpid()))

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p1.daemon = True #设置子进程p1为守护线程
  p1.start()
  p2.start()
  print now() + ' Process end .'

结果显示

启动了子进程 Run child process func_1 但是没有 func_1 的结束提示。随着主进程的结束而结束。

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1, args=('func_1',))
  p2 = Process(target=func_2, args=('func_2',))
  print now() + ' Process start.'
  p2.daemon = True #设置子进程p2为守护线程
  p1.start()
  p2.start()
  print now() + ' Process end .'

结果显示

启动了子进程func_1,而func_2 没有启动便随着主进程的结束而结束。

总结

对于进程或者子线程设置join() 意味着在子进程或者子线程结束运行之前,当前程序必须等待。当我们在程序中运行一个主进程(主线程),然后有创建多个子线程。主线程和子线程各自执行。当主线程想要退出程序时会检查子线程是否结束。如果我们设置deamon属性为True ,不管子线程是否结束,都会和主线程一起结束。

-The End-

以上就是python 如何设置守护进程的详细内容,更多关于python 守护进程的资料请关注我们其它相关文章!

(0)

相关推荐

  • python使用fork实现守护进程的方法

    os模块中的fork方法可以创建一个子进程.相当于克隆了父进程 os.fork() 子进程运行时,os.fork方法会返回0: 而父进程运行时,os.fork方法会返回子进程的PID号. 所以可以使用PID来区分两个进程: #!/usr/bin/env python #coding=utf8 from time import sleep import os try: pid = os.fork() except OSError, e: pass sleep(30) 运行代码,查看进程: [roo

  • Python 创建守护进程的示例

    考虑如下场景:你编写了一个python服务程序,并且在命令行下启动,而你的命令行会话又被终端所控制,python服务成了终端程序的一个子进程.因此如果你关闭了终端,这个命令行程序也会随之关闭. 要使你的python服务不受终端影响而常驻系统,就需要将它变成守护进程. 守护进程就是Daemon程序,是一种在系统后台执行的程序,它独立于控制终端并且执行一些周期任务或触发事件,通常被命名为"d"字母结尾,如常见的httpd.syslogd.systemd和dockerd等. 代码实现 pyt

  • 使用Python编写Linux系统守护进程实例

    守护进程(daemon)是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控.此类程序会被以进程的形式初始化.通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下.守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程调用fork,然后使其父进程立即终止,使得这个子进程能在init下运行.–维基百科 守护进程区别于普通用户登陆系统后运行的进程,它是直接由系统初始化,和系统用户没有关系,而用户开启的进程依存与用

  • python并发编程多进程之守护进程原理解析

    守护进程 主进程创建子进程目的是:主进程有一个任务需要并发执行,那开启子进程帮我并发执行任务 主进程创建子进程,然后将该进程设置成守护自己的进程 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children 如果我们有两个任务需要并发执行,那么开一个主进程和一个子进程分别去执行就ok了,如果子进程的任务

  • Python如何实现守护进程的方法示例

    场景设置: 你编写了一个python服务程序,并且在命令行下启动,而你的命令行会话又被终端所控制,python服务成了终端程序的一个子进程.因此如果你关闭了终端,这个命令行程序也会随之关闭. 要使你的python服务不受终端影响而常驻系统,就需要将它变成守护进程. 守护进程就是Daemon程序,是一种在系统后台执行的程序,它独立于控制终端并且执行一些周期任务或触发事件,通常被命名为"d"字母结尾,如常见的httpd.syslogd.systemd和dockerd等. 代码实现 pyth

  • python实现守护进程、守护线程、守护非守护并行

    守护进程 1.守护子进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to havechildren 注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止 我们来看一个例子 from multiprocessing import Process import os,time,random def task(): p

  • Python守护进程实现过程详解

    这篇文章主要介绍了Python守护进程实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出.如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性.即在线程开始(thread.start())之前,调用setDeamon()函数,设定线程的daemon标志.(thread.setDaemon(True))就

  • python实现的守护进程(Daemon)用法实例

    本文实例讲述了python实现的守护进程(Daemon)用法.分享给大家供大家参考.具体如下: def createDaemon(): "'Funzione che crea un demone per eseguire un determinato programma-"' import os # create - fork 1 try: if os.fork() > 0: os._exit(0) # exit father- except OSError, error: pr

  • Python守护进程和脚本单例运行详解

    本篇文章主要介绍了Python守护进程和脚本单例运行,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc.d中启动,可以由inetd守护进程启动,也可以有作业规划进程crond启动,还可以由用户终端(通常是shell)执行. Python有时需要保证只运行一个脚本实例,以避

  • python daemon守护进程实现

    假如写一段服务端程序,如果ctrl+c退出或者关闭终端,那么服务端程序就会退出,于是就想着让这个程序成为守护进程,像httpd一样,一直在后端运行,不会受终端影响. 守护进程英文为daemon,像httpd,mysqld,最后一个字母d其实就是表示daemon的意思. 守护进程的编写步骤: 1.fork子进程,然后父进程退出,此时子进程会被init进程接管. 2.修改子进程的工作目录,创建新进程组合新会话,修改umask. 3.子进程再次fork一个进程,这个进程可以称为孙子进程,然后子进程退出

随机推荐