python关闭线程重新运行_从python线程调用的进程在关闭主进程时继续运行

为了简化事情,我们忽略Tkinter和使用了一个单独线程的事实。在

这种情况下,应用程序会生成一个子进程来执行外部程序(机器人复制.exe在这个问题中),你需要在某个事件(当Tkinter应用程序在这个问题中关闭时)停止你的应用程序。在

这需要一个进程间通信机制,因此将通知生成的进程事件,并相应地作出反应。一种常见的机制是使用操作系统提供的信号。在

您可以向外部进程发送一个信号(SIGTERM),并请求它退出。假设程序按预期对信号做出反应(大多数编写良好的应用程序都会这样做),您将获得所需的行为(进程将终止)。在

在子进程上使用terminate方法将当前平台的适当信号发送给子进程。在

您需要引用onQuit函数中的子流程对象proc(从提供的代码中我看到{}是一个函数而不是对象方法,因此它可以使用一个全局变量来访问proc),这样就可以调用进程的terminate方法:def onQuit(self):

global t1, proc

if t1.isAlive():

pass

# by the way I'm not sure about the logic, but I guess this

# below statement should be an elif instead of if

if tkMessageBox.askyesno("Title", "Do you really want to exit?"):

proc.terminate()

self.destroy()

self.master.destroy()

这段代码假设您在全局范围内存储对子进程的引用,因此您还必须修改CopyFiles。在

我不确定robocopy如何处理终止信号,我猜这不是我们能控制的。在

如果您对外部程序有更多的控制(可以修改源代码),那么可能会有更多的选项,例如使用stdio发送消息,或使用共享内存等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值