如何关闭线程并退出命令行?

2024-09-26 18:00:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的例子,它打印出名字,但问题是,当我按下ctrl+C时,程序不会返回到正常的命令行界面:

^CStopping 

当我只看到我的光标闪烁,但我什么也做不了,所以我不得不关闭窗口,再次打开它。 我在运行Ubuntu12.10。在

这是我的准则:

^{pr2}$

Tags: 命令行程序界面名字例子ctrl准则光标
2条回答

您的主线程卡在Starter.next。然后在那里调用中断并传播到try语句的第一行并被捕获,在调用join之前跳到except子句。尝试将join调用放在finally块中(使用sys.exit),或者简单地将其移动到异常处理程序

您的主要问题是没有将keep_running声明为global,因此{}只是创建一个同名的局部变量。在

如果您修复了这个问题,它通常会在某些平台上退出。在

如果您希望它在所有平台上退出always的话,您还需要做两件事:

  1. join您创建的线程。在
  2. 使用Lock或其他同步机制保护共享全局变量。在

不过,这里并不需要共享的全局keep_running标志。你已经有了一个queue。只需定义一个可以在队列上发布的特殊“关闭”消息,或者使用关闭队列作为关闭的信号。在

当我们在做的时候,除非你试图模拟一个慢的网络或者其他什么,否则在你的代码中没有必要使用time.sleep。打电话给self.queue.get(timeout=0.2)。这样,就不再总是花0.2秒来获取每个条目,而是需要最多0.2秒,但如果已经有东西,则只需0秒。在

相关问题 更多 >

    热门问题