【问题标题】:Design a multi-process daemon设计一个多进程守护进程
【发布时间】:2016-02-29 23:43:11
【问题描述】:

我正在用 Python (Django) 编写一个 Web 应用程序,它将在旁边执行任务/进程,通常是网络扫描。我希望用户能够终止扫描,实时查看其状态或结果。

我认为最好的方法之一是拥有一个独立进程的作业管理器守护进程,即:

  1. 通过 TCP 连接接受新作业。
  2. 接受用户命令,通常用于终止或重新启动进程。
  3. 作业状态报告。

我正在为这段代码的结构而苦苦挣扎。我认为守护进程上的 TCP 端口将接受新作业。然后它将创建一个 os.fork(),它本身将创建一个 os.fork()。第二个 fork 将为 nmap 执行 os.execv()。第一个 os.fork() 将监视第二个 fork(如何?),当它完成时,它将向主守护进程报告它已经结束。第一个 fork 还必须能够终止第二个子进程。

听起来怎么样?是否已经完成了这样的结构?我不想重新创建轮子。

最后,子进程如何知道第二个子进程,即运行 os.execv() 的那个子进程已终止?或者它是否还在运行?我讨厌不断地轮询进程列表。

正如我所说,这必须在 Python 中完成。

【问题讨论】:

  • 你基本上只是描述了芹菜......
  • 我描述了芹菜?我不明白你的意思。
  • Celery 是一个 python 分布式任务运行器celeryproject.org。也就是说,您实际上并没有描述 celery,您基本上描述了一个标准的、普通的网络守护进程。在python中可以做你要求的事情,但是既然你特别说你不想重新发明轮子,我建议你看一下python标准库中包含的socketserver模块docs.python.org/3.4/library/socketserver.html

标签: python linux daemon python-daemon


【解决方案1】:

我选择了基于分叉的方法。这种方法是“错误的”,但它有效并满足了我的需求。 https://gist.github.com/FarhansCode/a0f27469142b6afaa6c2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2023-03-02
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多