gpt4 book ai didi

python - 如何暂停和恢复Python线程.Timer

转载 作者:行者123 更新时间:2023-12-01 04:43:39 27 4
gpt4 key购买 nike

在Python中,threading.Timer可以很好地在一段时间后执行函数。但没有暂停或恢复功能。还有其他办法吗?

需要这样的东西。

from threading import Timer
from time import sleep
def Hello():
print "hello"
t=Timer(10, Hello)
t.start()
sleep(3)
### <Pause Timer t>
### <do some work>
### <Resume Timer t>

如果知道计时器已启动多少时间或还剩多少时间,也会很有帮助。所以上面可以这样做:

### x =  Time passed by Timer t
### t.cancel()
### <do some work>
### t=Timer(10-x, Hello)
### t.start()

编辑1:

这是我在 vitaut 回答后的代码:

## My Timer Class ##

from threading import Timer as threadTimer
from time import time, sleep
from random import randint as rint

class MyTimer:

def __init__(self, key, delete):
self.startTime = time()
self.timer = threadTimer(15, delete, args=[key])
self.timer.start()
def pause(self):
self.timer.cancel()
self.endTime = time()
def resume(self, delete, key):
self.timer = threadTimer(15-(self.endTime-self.startTime), delete, args=[key])
self.timer.start()
def cancel(self):
self.timer.cancel()

我正在使用此代码进行测试:

class MyClass:

def __init__(self):
self.dict={}

def delete(self, key):
print key, time()-self.dict[key]["stime"]
self.dict[key]["timer"]=None
self.dict[key]=None
del self.dict[key]

def doSomeWork(self, key):
for i in xrange(10):
x=str(rint(0,3))
if self.dict.has_key(key):
self.dict[key]["timer"].pause()
print key,
sleep(1)
self.dict[key]["timer"].resume(self.delete, key)
print

def createDict(self):
print "Pausing Timer for 1 second for ",
for i in xrange(10):
self.dict[i]={}
self.dict[i]["timer"]=MyTimer(key, self.delete)
self.dict[i]["stime"]=time()

x=MyClass()
x.createDict()
x.doSomeWork()

输出:

Pausing Timer for 1 second for  0 1 0 2 1 0 2 1 1 0
3 15.0000641346
4 15.0000319481
5 15.0000360012
6 15.0000460148
7 15.0002529621
8 15.0000050068
9 15.0001029968
0 16.000754118
2 16.0007479191
1 16.0011930466

因为它使用键 1 暂停计时器 4 次,每次 1 秒。所以 1 的最终时间应该是 19 秒以上(预期)。但只显示 16 个。

最佳答案

据我所知,Timer 类没有暂停/恢复功能,但您可以使用 start/cancel 轻松模拟它并跟踪自己启动定时器的时间。

关于python - 如何暂停和恢复Python线程.Timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29981393/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com