import threading from threading import Thread,Timer class LinkReal(): #global datas datas = [] datareceive = None t = None @staticmethod def start(): LinkReal.datareceive = Thread(target=LinkReal.startt()) LinkReal.datareceive.start() lock = threading.RLock() @staticmethod def startt(): LinkReal.t = Timer(3,LinkReal.save) while True: LinkReal.datas.append(1) @staticmethod def save(): #LinkReal.lock.acquire() datass = LinkReal.datas.copy() LinkReal.datas.clear() for d in datass: print(d) # 按间距中的绿色按钮以运行脚本。 if __name__ == '__main__': LinkReal.start() 我的这个代码中的save函数为什么不执行呢?
时间: 2024-01-10 14:02:30 浏览: 109
你的代码中,`save()` 函数没有被执行是因为 `Timer` 对象的 `start()` 方法没有被调用。在 `startt()` 函数中,你需要手动调用 `t.start()` 启动计时器,才能触发 `save()` 函数的执行。
修改代码如下:
```python
import threading
from threading import Thread,Timer
class LinkReal():
#global datas
datas = []
datareceive = None
t = None
@staticmethod
def start():
LinkReal.datareceive = Thread(target=LinkReal.startt())
LinkReal.datareceive.start()
lock = threading.RLock()
@staticmethod
def startt():
LinkReal.t = Timer(3,LinkReal.save)
LinkReal.t.start() # 启动计时器
while True:
LinkReal.datas.append(1)
@staticmethod
def save():
#LinkReal.lock.acquire()
datass = LinkReal.datas.copy()
LinkReal.datas.clear()
for d in datass:
print(d)
if __name__ == '__main__':
LinkReal.start()
```
注意,`Timer` 对象只会在第一次执行完毕后自动重启,因此在 `save()` 函数中需要手动创建并启动新的计时器对象以实现循环执行。
阅读全文