【发布时间】:2014-05-09 16:46:27
【问题描述】:
有人可以建议我将 Java Timer 类转换为 Python 吗?目前我正在将 Java 程序转换为 Python 脚本。但是,Python 没有 Timer/TimerTask 库(如果有,请赐教。谢谢!)。我需要能够重置计时器。 Java 有 Timer.cancel,但 Python 没有。有替代品吗?
timer.cancel();
timer = new Timer("Printer");
MyTask t = new MyTask();
timer.schedule(t, 0, 1000);
Java 脚本计时器
class Timerclass extends TimerTask {
//times member represent calling times.
private int times = 0;
public void run() {
times++;
if (times <= 5) {
System.out.println(""+times);
} else {
this.cancel();
//Stop Timer.
System.out.println("Timer Finish");
}
}
}
目前我的代码
import time
import threading
class Variable:
count = 0
people = 0
times = 0
def enter():
if int(Variable.count == 1):
print("Entered")
t = threading.Timer(5.0, countdown)
t.start()
else:
print("Entered +1")
t.clear() // Stuck Help
t = threading.Timer(5.0, countdown)
t.start()
def out():
if int(Variable.count > 0):
print("Exited")
elif int(Variable.count < 0):
print("Error")
def countdown():
print("TIMEUP")
while True:
sensor1 = input("Sensor 1: ")
sensor2 = input("Sensor 2: ")
Variable.count+=1
if int(sensor1) == int(sensor2):
Variable.count -= 1
print(Variable.count)
print("error")
elif int(sensor1) == 1:
Variable.people += 1
print(Variable.people)
enter()
elif int(sensor2) == 1:
Variable.people -= 1
print(Variable.people)
out()
else:
print("Error")
我遇到了一个问题,我需要在方法调用时停止当前计数并开始一个新的计数
基本上我想要或正在寻找的是,当我回忆起这种方法时,它将重置或取消任何现有的并重新计算
最新更新
import time
import threading
class Variable:
count = 0
people = 0
times = 0
def countdown():
print("TIMEUP")
t = threading.Timer(5.0, countdown)
def enter():
if int(Variable.count == 1):
print("Entered")
t.start()
else:
print("Entered +1")
t.cancel()
t.join() # here you block the main thread until the timer is completely stopped
t.start()
def out():
if int(Variable.count > 0):
print("Exited")
elif int(Variable.count < 0):
print("Error")
while True:
sensor1 = input("Sensor 1: ")
sensor2 = input("Sensor 2: ")
Variable.count+=1
if int(sensor1) == int(sensor2):
Variable.count -= 1
print(Variable.count)
print("error")
elif int(sensor1) == 1:
Variable.people += 1
print(Variable.people)
enter()
elif int(sensor2) == 1:
Variable.people -= 1
print(Variable.people)
out()
else:
print("Error")
任何人都可以发现我的错误,但我 t.clear() 过程
in start raise RuntimeError("线程只能启动一次") RuntimeError: 线程只能启动一次
【问题讨论】:
-
根据您需要的精确程度,您可以使用
timemodule 获得一些东西,但这取决于系统(因此它并不总是正确) -
@wnnmaw erm 只是一个计数器,当它超过它会做某事的值时,它会计数 1,2,3,4,5,6。当函数被调用时,它将再次重置计数
-
是的,这就是计数器......你仍然可以使用
time -
@DanvinLeeQicheng 我用你最近一期的答案更新了我的答案。
-
@dano 感谢您的回答,但我的 def 输出还有一个问题:我需要重置并再次调用计时器以使 t 全局且可供所有人访问