【问题标题】:Kill Python Thread杀死 Python 线程
【发布时间】:2017-01-13 09:37:01
【问题描述】:

我正在使用 python 与机器人一起工作。 我正在使用多线程(在这种情况下是两个线程)。我想在线程 B 收到事件时停止线程 A。

主要:

tA = threading.Thread(target=runThreadA)
tA.setDaemon(True)

tB = threading.Thread(target=runThreadB)
tB.setDaemon(True)

tA.start()
tB.start()

线程 A:

def runThreadA():
    print "Estado1"
    time.sleep(5)
    print "Finalizo Estado1"
    return 'out1'

线程 B:

def runThreadB():
    print "Estado2"
    time.sleep(8)
    print "Finalizo Estado2"
    return 'a1'

我们想在线程 A 完成后杀死线程 B,所以线程 B 不会再等待 3 秒。

谢谢。

【问题讨论】:

标签: python multithreading


【解决方案1】:

永远不要试图从线程外部的东西中杀死线程。你 永远不知道该线程是否持有锁。 Python 没有提供 从外部杀死线程的直接机制;但是,你可以做到 使用 ctypes,但这是导致死锁的秘诀。

此引述来自 Raymond Hettinger,有一个 speech 与此有关。

【讨论】:

  • +1 但我认为您可以在没有 ctypes 的情况下使用检查中断线程并直接弄乱 Python 堆栈帧。我没有时间测试这个想法,但我认为它应该是可能的。当然,我同意不应该这样做,除非在极端情况下,而且,管理 GIL 将是这里有问题的部分。也许垃圾收集也是如此。
猜你喜欢
  • 2011-04-19
  • 2021-11-13
  • 2022-11-29
  • 2023-02-01
  • 1970-01-01
  • 2015-04-22
  • 2014-10-24
  • 2016-07-10
  • 1970-01-01
相关资源
最近更新 更多