Python网编_守护进程

假如我有500台机器,跑着500个进程,假如有一部分台机器挂了,我们怎么能及时的知道呢?我们维护自己的机器当然要及时的直到啦so 如果我们有一个监控的软件来实时的监控是不是就可以解决这个问题啦其原理是:client端每隔一个时间段(比如60秒)汇报给server端 没有在正确的时间收到某台机器的汇报就说明这台机器出问题了,应该去看一看。那么如何做呢?在client端的主进程中开启一个子进程,通过这个子进程来汇报,看下面:
from multiprocessing import Process
import time
def eye():
    while True:
        print(‘server大哥,我很好,请放心‘)
        time.sleep(1)

def main():
    print(‘主程序代码‘)
    time.sleep(3)

if __name__ == ‘__main__‘:
    p = Process(target=eye)
    p.daemon = True  # 把p设置成守护进程(主进程代码结束,守护进程会随之结束)
    p.start()
    main()
守护进程只守护主进程的代码而已,如果有多个子进程在执行,那么主进程肯定要等到所有子进程结束收完尸体才能结束,守护进程只守护主进程的代码其他的不会管。那么,那么,那么如果我想一并把其他的子进程也守护了呢?怎么做?    可以考虑使用join啊,通过将p2.join加到主进程代码中,那么守护进程就要等这一句执行完才结束(这一句属于主进程的代码啊),所以变相的就把这个子进程也守护了。
总结一下:   关键字daemon,关键字daemon,关键字daemon    1守护进程会随着主进程代码的结束而结束    2守护进程不会守护除了主进程代码外的其他子进程(除非你人为的使用join去让他去守护子进程)   


原文地址:https://www.cnblogs.com/gzying-01/p/10371543.html

时间: 2024-11-06 13:53:52

Python网编_守护进程的相关文章

Python网编_进程之间的数据隔离

写在前面: 控制台的本质是一个文件 文件操作的时候尽量不要用r+ w+ a+ 如果用要小心文件指针混乱 随着进程数量的增多会有一些隐患 from multiprocessing import Process n = 100 # 定义一个全局变量 def func(): global n # 通过global改变n的值 n -= 1 if __name__ == '__main__': lis = [] for i in range(2): # 开启两个进程 p = Process(target=

Python网编_进程对象的其他方法

直接上代码: from multiprocessing import Process import time class MyProcess(Process): def __init__(self,a,b): super().__init__() self.a = a self.b = b def run(self): print('start') time.sleep(0.1) print(self.a,self.b) if __name__ == '__main__': p = MyProc

Python网编_进程间的数据共享

Manager提供了很多数据共享机制,但是对于一些基础数据类型来说,是数据不安全的,那么Q:如何解决呢? A: 需要我们自己手动加锁 from multiprocessing import Manager,Process,Lock # Process开子进程用,Lock数据加锁用,Manager进程间数据共享用 def work(d,lock): # lock.acquire() # d['count'] -= 1 # lock.release() with lock: # 上下问管理 注意了l

Python网编_进程池的回调函数

将n个任务交给n个进程去执行每一个进程在执行完毕之后会有一个返回值,这个返回值交给callback函数指定的那个函数去处理这样的话所有的进程哪一个执行的最后快,哪一个就可以先进性统计工作这样就能在最短的时间内得到我们想要的结果 import time import random from multiprocessing import Pool def get(i): # 使用i模拟网站地址 在子进程中执行 time.sleep(random.random()) # 模拟不同的网站返回数据的时间

[Python网络编程]浅析守护进程后台任务的设计与实现

在做基于B/S应用中,经常有需要后台运行任务的需求,最简单比如发送邮件.在一些如防火墙,WAF等项目中,前台只是为了展示内容与各种参数配置,后台守护进程才是重头戏.所以在防火墙配置页面中可能会经常看到调用cgi,但真正做事的一般并不是cgi,比如说执行关机命令,他们的逻辑如下: (ps:上图所说的前台界面包含通常web开发中的后端,不然也没有socket一说) 为什么要这么设计 你可能疑惑为什么要这么设计,我觉得理由如下: 首先有一点说明,像防火墙等基本上都运行在类Linux平台上 1.安全问题

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

守护进程(Daemon)也称为精灵进程是一种生存期较长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件. 他们常常在系统引导装入时启动,在系统关闭时终止. os模块中的fork方法可以创建一个子进程.相当于克隆了父进程 os.fork() 子进程运行时,os.fork方法会返回0: 而父进程运行时,os.fork方法会返回子进程的PID号. 所以可以使用PID来区分两个进程: #!/usr/bin/env python #coding=utf8 from time

Python与Hack之守护进程

1.什么是守护进程: 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭.但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程

python网编并发数据库

第一部分 必答题 简述 OSI 7层模型及其作用?(2分) 应用层:与用户直接交互,软件.网站等 表示层:使用软件.网站可以查看的数据,图片等 会话层:保持登录状态,电脑中为cookie 传输层:选择TCP/UDP协议,进行数据发送. 网络层:通过IP路径寻址,并且对数据进行封装 数据链路层:使用mac地址寻址,又进行了数据封装 物理层:将上面得到的数据转化为信号 简述 TCP三次握手.四次回收的流程.(3分) 三次握手: 第一次握手:Client将标志设置为SYN=1,随机产生一个seq=J,

Python网编_join方法

前言:我们知道父进程要负责回收子进程占用的系统资源(就是父要给子收尸)so父进程要等子进程结束之后收了尸才能结束,如果父进程先结束,子进程的资源就没法被回收,就会一直占用系统资源,就成了僵尸进程了我们的Python中如果父进程即使运行完了或者报错了也要等待子进程结束收了尸再结束 举个例子:我们要给500个人群发邮件 假设我们每发送一封邮件需要0.1s 总耗时0.1*500 = 50s 那么我们开启了10个进程,每个进程负责50个邮件 所有进程发送完邮件,我们需要得到一个通知:所有的进程都已经发送