歌者文明清理员 发表于 2023-2-5 10:22:23

threading停止

如何停止用threading开的while True函数线程?

人造人 发表于 2023-2-5 11:00:17

2种
要么直接杀死这个while True函数所在的线程
要么给这个while True函数所在的线程发一个消息,让这个while True函数所在的线程自己退出,也就是说这个while True里面要有exit,或者return这类语句,在检测到主线程发过来的要求自己退出的消息,那么就执行exit或者return
不建议直接杀,因为有可能在子线程里面获取到一些资源没有释放,你直接杀死这个子线程可能会导致主线程和其他线程再也无法获取到这些资源

歌者文明清理员 发表于 2023-2-5 17:29:31

人造人 发表于 2023-2-5 11:00
2种
要么直接杀死这个while True函数所在的线程
要么给这个while True函数所在的线程发一个消息,让这个w ...

给个代码{:10_316:}

人造人 发表于 2023-2-5 17:55:51

最简单的形式

#!/usr/bin/env python
#coding=utf-8

import threading
import time

def hello():
    while True:
      global flag
      if flag == 1: break
      print('hello')
      time.sleep(1)

flag = 0
task = threading.Thread(target = hello)
task.start()
time.sleep(5)
flag = 1
task.join()

歌者文明清理员 发表于 2023-2-5 18:55:41

人造人 发表于 2023-2-5 17:55
最简单的形式

虽然看懂了,可这似乎不用join(),flag=1的时候hello回自己退出

人造人 发表于 2023-2-5 19:04:28

歌者文明清理员 发表于 2023-2-5 18:55
虽然看懂了,可这似乎不用join(),flag=1的时候hello回自己退出

是的,hello会自己退出的
但是在hello退出之前主线程先退出了,这会发生什么?
也许不会发生什么,不过还是按顺序退出比较好
join可以保证子线程先退出
页: [1]
查看完整版本: threading停止