当前位置: 首页 > 面试题库 >

使用键盘中断关闭所有线程

盖锐
2023-03-14
问题内容

我在这里想要做的是使用键盘中断退出程序中所有正在进行的线程。这是创建线程的代码的精简版本:

for i in taskDictionary:
    try:
        sleep(60)
        thread = Thread(target = mainModule.executeThread)
        thread.start()
    except KeyboardInterrupt:
        thread.__stop()

程序本身要复杂得多,需要考虑大量影响线程的不同变量,甚至可以选择以顺序模式启动,在这种模式下,任务没有线程化,而是逐个启动,因此可能存在一些问题有了这个小的变化,我就想到了。我这样做的方式产生了50/50的结果。中断将起作用,但是线程将永远不会干净退出。有时他们会继续前进,但停止执行将来的线程,有时它们会退出有关中断的大量错误,而另一些时候,中断根本不会执行任何操作。上次我运行该程序时,该程序停止了将来任何线程的执行,但没有停止当前线程。是否有任何方法可以退出线程而无需进入线程实际在其中执行的模块?


问题答案:

类似的问题是“如何杀死线程?”

您在线程中创建退出处理程序,该处理程序由线程模块中的锁或事件对象控制。然后,您只需删除锁或向事件对象发出信号。这通知线程应该停止处理并正常退出。在你的主程序信号线后,剩下要做的唯一事情是使用thread.join()的方法main,这将等待线程关闭。

一个简短的例子:

import threading
import time

def timed_output(name, delay, run_event):
    while run_event.is_set():
        time.sleep(delay)
        print name,": New Message!"


def main():
    run_event = threading.Event()
    run_event.set()
    d1 = 1
    t1 = threading.Thread(target = timed_output, args = ("bob",d1,run_event))

    d2 = 2
    t2 = threading.Thread(target = timed_output, args = ("paul",d2,run_event))

    t1.start()
    time.sleep(.5)
    t2.start()

    try:
        while 1:
            time.sleep(.1)
    except KeyboardInterrupt:
        print "attempting to close threads. Max wait =",max(d1,d2)
        run_event.clear()
        t1.join()
        t2.join()
        print "threads successfully closed"

if __name__ == '__main__':
    main()

如果您确实需要 杀死
线程的功能,请使用多处理。它允许您将SIGTERM发送到各个“进程”(它也与线程模块非常相似)。一般而言,线程是针对您的IO绑定,而多处理则是针对您的处理器的绑定。



 类似资料:
  • 问题内容: 我确信这并不是那么困难,但是我很难找到有关如何使用textview(而不是textfield)使用回车/完成键关闭键盘的信息。这是到目前为止我尝试过的(与文本字段一起使用。) 非常感谢您的帮助! 问题答案: 这对我有用:

  • 本文向大家介绍iOS 关闭键盘,包括了iOS 关闭键盘的使用技巧和注意事项,需要的朋友参考一下 示例 迅速 Ctrl +从MainStoryboard中的UItextfield拖动到ViewController类,然后创建一个UITextField出口 之后,再次选择UItextField并在ViewController类中按Ctrl +拖动,但是这次选择“动作”连接,然后在存储上选择“退出时结束

  • 问题内容: 这段代码只是旨在查找文本框并向其中发送一些文本。这样做时,键盘出现在android设备上。如何在sendKeys之后关闭它。 问题答案: 仅适用于。我正在使用包含此功能的java-client-2.2.0.jar。

  • 我正试图在Kotlin中编写一个简单的Android应用程序。我的版面中有一个编辑文本和一个按钮。在编辑字段中写入并单击按钮后,我想隐藏虚拟键盘。 关于用Java实现Android软键盘,有一个流行的问题是关闭/隐藏Android软键盘,但据我所知,Kotlin应该有一个替代版本。我该怎么做?

  • 本文向大家介绍IOS关闭键盘的方法,包括了IOS关闭键盘的方法的使用技巧和注意事项,需要的朋友参考一下 首先输入完成后按键盘上的done关闭键盘 首先在Interface Builder中选择TextFields,然后在Text Field Attributes中找到Text Input Traits,选择Return Key为done。OK 定义方法 实现方法 然后找到事件Did End On

  • 问题内容: 在按下(代码格式)后,有人知道如何在Eclipse中打开换行符吗,例如: 问题答案: 转到窗口->首选项-> Java->代码样式->格式化程序。创建新的格式化程序。单击编辑,然后选择选项卡“换行”,并将“换行”策略设置为“不换行”。