多线程时如何关闭线程?[重复]
- 2025-03-10 08:52:00
- admin 原创
- 71
问题描述:
为了简化我遇到的情况:我正尝试在 Python 2.7 中终止仍在运行的线程,但我不确定如何执行此操作。
看看这个简单的代码:
import time
import threading
def thread1():
print "Starting thread 1"
while True:
time.sleep(0.5)
print "Working"
thread1 = threading.Thread(target=thread1, args=())
thread1.start()
time.sleep(2)
print "Killing thread 1"
thread2.stop()
print "Checking if it worked:"
print "Thread is: " + str(thread1.isAlive())
线程 1 一直在“工作”,我试图在主线程中将其终止。有什么办法吗?我试过:
threat1.terminate
threat1.stop
threat1.quit
threat1.end
这一切似乎表明,没有办法用一行简单的代码来真正阻止它。您有什么建议?
解决方案 1:
要终止Thread
受控,使用线程安全threading.Event()
:
import threading, time
def Thread_Function(running):
while running.is_set():
print('running')
time.sleep(1)
if __name__ == '__main__':
running = threading.Event()
running.set()
thread = threading.Thread(target=Thread_Function, args=(running,))
thread.start()
time.sleep(1)
print('Event running.clear()')
running.clear()
print('Wait until Thread is terminating')
thread.join()
print("EXIT __main__")
输出:
running running Event running.clear() Wait until Thread is terminating EXIT __main__
使用 Python:3.4.2 测试
在线演示:reply.it
解决方案 2:
通常,在这种情况下,我会使用某种信号:
import time
import threading
class thread1(threading.Thread):
def run(self):
self.kill = False
print "Starting thread 1"
while not self.kill:
time.sleep(0.5)
print "Working"
thread_obj = thread1()
thread_obj.start()
time.sleep(2)
print "Killing thread 1"
thread_obj.kill = True
print "Checking if it worked:"
time.sleep(1)
print "Thread is: " + str(thread_obj.isAlive())
编辑
在阅读了其中一条评论中建议的答案后...我意识到这只是那里描述的简化版本。无论如何,我希望这会很有用。
解决方案 3:
的确!
线程不能被销毁、停止、暂停、恢复或中断
(链接下方的段落中是这样说的。)
让您的线程监听您可能通过队列(最好)、共享变量(最差)或任何其他方式发送的信号。请小心,不要让它们运行未经检查的循环,如您的示例代码中所示。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD