在线程完成执行之前,如何返回使用Python中的线程开始的冗长进程的进程id?
subprocess.popen。这个过程应该持续5-6个小时。subprocess.popen创建的进程的进程id。有什么解决办法吗?
发布于 2017-03-31 16:48:40
如果您使用subprocess.Popen只是为了派生另一个进程,那么您没有理由从另一个线程中这样做。这样创建的子进程不会阻塞您的主线程。在子进程运行时,您可以继续做其他事情。只需保留对返回的Popen对象的引用。
Popen对象拥有监视/与子进程交互所需的所有工具。您可以读写它的标准输入和输出(如果使用stdin和stdout成员(如果使用PIPE创建);可以监视stdin和stdout的可读性/可写性(使用select模块);您可以检查子进程是否仍然存在于poll中,通过wait获取其退出状态;您可以使用terminate (或kill )来阻止它(这取决于您希望成为多大的重点)。
当然,在某些时候,从另一个线程执行此操作可能是有利的--例如,如果您需要与子进程进行大量交互,并在主线程中实现该操作,则会使您的逻辑变得过于复杂。在这种情况下,最好安排一种机制,让您向其他“监视”线程发出信号,表示该关闭,并允许监视线程在子进程上执行terminate或kill。
https://stackoverflow.com/questions/43141252
复制相似问题