Python3客户端运行时间线程循环报错:time_thread无start()属性求解决
解决Python线程实现运行时间时钟的问题
嘿,我来帮你搞定这个线程的问题!你的代码报错是因为几个关键的小问题没处理好,咱们一步步来修正:
你的代码问题分析
- 自定义的
time_thread类没有继承Python标准库的threading.Thread,所以它根本没有start()方法——这就是报错的直接原因。 - 你先调用了
time_thread.start(),后初始化zetime = 0,线程启动时zetime还没定义,会直接抛出NameError。 - 线程里的循环条件
zetime > -1,如果zetime是全局变量,还得注意线程安全(不过这个简单场景暂时可以先不用太复杂的锁)。
正确的类继承方式实现
首先要导入threading模块,然后让你的线程类继承threading.Thread,调整变量初始化顺序,再正确实例化并启动线程:
import threading import time class TimeThread(threading.Thread): def __init__(self): super().__init__() self.zetime = 0 self.running = True # 用一个标志来控制线程停止 def run(self): while self.running: print(f"运行时间: {self.zetime} 秒") self.zetime += 1 time.sleep(1) # 每秒打印一次,不然会疯狂输出 # 初始化并启动线程 clock_thread = TimeThread() clock_thread.start() # 模拟客户端的其他代码运行 try: while True: # 这里写你的客户端逻辑,比如接收服务器消息、处理请求等 print("客户端正在处理其他任务...") time.sleep(3) except KeyboardInterrupt: # 捕获Ctrl+C,停止线程 clock_thread.running = False clock_thread.join() print("程序退出")
更简洁的函数式写法(适合新手)
如果不想写类,也可以直接用threading.Thread传入目标函数,代码更短:
import threading import time zetime = 0 running = True def time_clock(): global zetime, running while running: print(f"运行时间: {zetime} 秒") zetime += 1 time.sleep(1) # 启动线程 clock_thread = threading.Thread(target=time_clock) clock_thread.start() # 客户端其他逻辑 try: while True: print("客户端执行其他操作...") time.sleep(2) except KeyboardInterrupt: running = False clock_thread.join() print("程序结束")
关键要点提醒
- 一定要导入
threading模块,Python的线程功能都在这里。 - 启动线程时,必须先创建线程实例(比如
clock_thread = TimeThread()),再调用实例的start()方法,而不是直接调用类的start()。 - 加上
time.sleep(1)很重要,不然线程会无限循环打印,占用大量CPU资源。 - 用一个标志(比如
running)来控制线程停止,比直接强制终止线程更安全。
内容的提问来源于stack exchange,提问作者Chenko
相关产品推荐
相关产品推荐

