【发布时间】:2015-09-28 23:48:05
【问题描述】:
我想创建一个子进程,它会在父进程完成后运行。
我试过了:
subprocess.Popen(['myscript'])
exit()
子进程已创建,但父进程一直等到子进程完成。 相反,我想快点完成,让孩子在后台做艰苦的工作。有什么建议吗?
一些说明:
- 它在 Linux (Ububntu Server 14.04) 上运行
- 最好是python 2.7
- 我不想以任何方式与孩子交流。孩子是完全独立的过程。
我需要快速完成主进程,因为它将通过网络访问。它旨在触发另一个脚本。结果将稍后发送到电子邮件(由子进程)。因此,用户无需等待答案。只需快速“确定”,然后孩子就开始了。
编辑: 好的。现在说实话,即使是我在这篇文章中的示例也适用于最简单的情况(只是那 2 行 + 休眠 10 秒的脚本 + 写入文件 => 主要完成,我在 10 秒内得到一个文件)。 实际情况要复杂一些。
有一个脚本,它遍历所有必须执行的脚本列表。这个主脚本使用 subprocess.Popen 和communicate() (等待输出)。这调用了我在这里寻求帮助的“主”脚本。这个“主要”做了一些事情,然后想在后台运行一个孩子。在这种情况下,“主要”等待孩子。
我将尝试制作一个简短的清理代码示例。
【问题讨论】:
-
试试
subprocess.Popen(['myscript'], start_new_session=True) -
@J.F.Sebastian Daemon 在这里可能有点矫枉过正。可悲的是,Ago 没有提到生成的进程是否必须由用户以某种方式进一步控制(停止、暂停、管道输入/输出等)。如果不需要控制并且生成的进程包含执行其操作然后自动进入不存在状态的代码,则您无需执行像创建守护程序那样复杂的操作。 OP 应该提供这些信息,以便我们可以评估在他的情况下什么是最佳解决方案。
-
应该在评论中提及这一点,而不仅仅是输入“相关”。发布链接而不提供有关其内容的信息以及它与手头问题的关系不是一件好事。
标签: python subprocess parent-child daemon