首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在线程完成执行之前使用python中的线程返回冗长进程的进程id

如何在线程完成执行之前使用python中的线程返回冗长进程的进程id
EN

Stack Overflow用户
提问于 2017-03-31 12:55:15
回答 1查看 267关注 0票数 1

在线程完成执行之前,如何返回使用Python中的线程开始的冗长进程的进程id?

  1. 我使用Tkinter,所以我不能在主线程上启动一个很长的进程,所以我在一个单独的线程上启动一个进程。
  2. 线程依次调用subprocess.popen。这个过程应该持续5-6个小时。
  3. 但是,当我按下停止按钮时,我需要这个进程停止,但是我无法返回使用subprocess.popen创建的进程的进程id。

有什么解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-31 16:48:40

如果您使用subprocess.Popen只是为了派生另一个进程,那么您没有理由从另一个线程中这样做。这样创建的子进程不会阻塞您的主线程。在子进程运行时,您可以继续做其他事情。只需保留对返回的Popen对象的引用。

Popen对象拥有监视/与子进程交互所需的所有工具。您可以读写它的标准输入和输出(如果使用stdinstdout成员(如果使用PIPE创建);可以监视stdinstdout的可读性/可写性(使用select模块);您可以检查子进程是否仍然存在于poll中,通过wait获取其退出状态;您可以使用terminate (或kill )来阻止它(这取决于您希望成为多大的重点)。

当然,在某些时候,从另一个线程执行此操作可能是有利的--例如,如果您需要与子进程进行大量交互,并在主线程中实现该操作,则会使您的逻辑变得过于复杂。在这种情况下,最好安排一种机制,让您向其他“监视”线程发出信号,表示该关闭,并允许监视线程在子进程上执行terminatekill

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43141252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档