Mercury_528 2024-04-14 12:50 采纳率: 100%
浏览 9
已结题

关于python中daemon用法的疑问

对于python中daemon(守护进程)用法的疑问。
在多个进程同时运行时,底层是否是由于互相抢占资源,从而导致了图1的结果。而加上了daemon后,'work'进程一旦被另一进程print(‘主线进程结束’)抢占,就会停止运行,造成了图2结果?daemon称为守护进程,意思就是为了保护本进程,一旦被"抢占 "就停止运行,从而起了守护作用? 不知道理解的对不对。
可不可以举一些实际开发中daemon用法的例子帮助理解一下?

import multiprocessing, time


def work():
    for i in range(10):
        print(f'工作中....{i}')
        time.sleep(0.3)

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=work)
    time.sleep(1)
    p1.start()
    time.sleep(1)
    print('主进程结束')

图1的结果是

img

import multiprocessing, time 


def work():
    for i in range(10):
        print(f'工作中....{i}')
        time.sleep(0.3)


if __name__ == '__main__':
    p1 = multiprocessing.Process(target=work)
    p1.daemon = True
    p1.start()
    time.sleep(1)
    print('主进程结束')

图2的结果是

img

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-04-14 17:32
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的问题描述,让我们来逐步分析并解决这个问题。

    1. 问题分析
      你的问题涉及到Python中多进程编程中的守护进程(daemon)用法。你通过两个示例展示了有守护进程和无守护进程的情况下的不同行为。在第一个示例中,当主进程结束时,工作进程仍在执行。而在第二个示例中,设置了守护进程后,工作进程在主进程结束时也随之结束。
    2. 解决方案
      根据你提供的描述和代码,你已经正确地使用了Python的multiprocessing库来创建进程,并且通过设置``` daemon=True
      但是,在第二个示例中,你可能没有给工作进程足够的时间来完成其工作,就让主进程结束了。因为主进程结束时,守护进程会随之结束。所以我们需要适当调整时间来观察守护进程的行为。
      以下是对第二个示例代码的调整,确保工作进程有足够的时间来执行完毕:
      pythonCopy code
      
      import multiprocessing
      import time
      def work():
      for i in range(10):
      print(f'工作中....{i}')
      time.sleep(0.3)
      if name == 'main':
      p1 = multiprocessing.Process(target=work)
      p1.daemon = True
      p1.start()

      主进程等待5秒钟

      time.sleep(5)
      print('主进程结束')
      ```
      这样做的话,主进程会等待5秒钟,然后结束。在这期间,守护进程会有足够的时间来执行其工作。当主进程结束时,守护进程也会结束。
    3. 实际开发中的守护进程用法示例
      在实际开发中,守护进程通常用于需要后台运行并在主进程结束时自动关闭的任务,比如:
    • 日志记录:在一个长时间运行的应用程序中,你可能想要一个单独的进程来负责日志记录,这样即使主进程结束了,日志记录进程仍然可以继续工作,直到日志完全被记录下来。
    • 定时任务:你可能需要一个后台进程来执行定时任务,如定时备份数据库、定时清理文件等。这样的进程可以设置为守护进程,以确保在主进程结束时自动关闭。
      希望以上解答能够帮助你理解守护进程的概念和用法。如果还有其他问题,欢迎继续提问!

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月14日