如何在线程完成执行之前返回在Python中使用Thread启动的冗长进程的进程ID?
subprocess.popen
。这个过程应该运行5-6个小时。subprocess.popen
创建的进程的进程ID。有没有解决方案?
答案 0 :(得分:0)
如果您正在使用subprocess.Popen
简单地剥离另一个进程,则没有理由需要从另一个线程执行此操作。以这种方式创建的子流程不会阻止您的主线程。在子流程运行时,您可以继续执行其他操作。您只需保留对返回的Popen
对象的引用。
Popen
对象具有监视/与子进程交互所需的所有工具。您可以读取和写入其标准输入和输出(通过stdin
和stdout
成员(如果使用PIPE
创建);您可以监控stdin
和stdout
(select
模块)的可读性/可写性;您可以使用poll
检查子流程是否仍然存在,并使用wait
获取其退出状态;您可以使用terminate
(或kill
来阻止它,具体取决于您希望的强烈程度)。
当 时,从另一个线程执行此操作可能是有利的 - 例如,如果您需要与子流程进行大量交互并在主线程中实现它将覆盖 - 使你的逻辑复杂化。在这种情况下,最好安排一种机制,通过该机制向您的另一方发出信号"监控"线程,它是时候关闭并允许监控线程在子流程上执行terminate
或kill
。