【发布时间】:2016-02-29 23:43:11
【问题描述】:
我正在用 Python (Django) 编写一个 Web 应用程序,它将在旁边执行任务/进程,通常是网络扫描。我希望用户能够终止扫描,实时查看其状态或结果。
我认为最好的方法之一是拥有一个独立进程的作业管理器守护进程,即:
- 通过 TCP 连接接受新作业。
- 接受用户命令,通常用于终止或重新启动进程。
- 作业状态报告。
我正在为这段代码的结构而苦苦挣扎。我认为守护进程上的 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