我试图在python中运行特定时间(例如100秒),然后继续运行另一个功能特定时间。
我尝试创建一个计数器并使用while计数器<(某些帧号)。我也尝试通过类似的方式使用日期时间
end_time = datetime.now()+ timedelta(seconds = 100)
而datetime.now() 我正在使用以下代码运行它: “运行”功能似乎从未停止,我也不明白为什么。class FicTracAout90deg(object):
def run(self, gain_yaw = 1):
end_time = datetime.now() + timedelta(seconds=10)
while datetime.now() < end_time:
for item in self.pubsub.listen():
message = item['data']
try:
data = json.loads(message)
except TypeError:
continue
if data['type'] == 'reset':
self.time_start = time.time()
self.heading_rate_calc.reset(self.time_start)
else:
time_curr = time.time()
heading = data['heading']
intx = data['intx']
inty = data['inty']
velx = data['velx']
vely = data['vely']
velheading = data['deltaheading']
self.accum_heading += velheading
self.accum_x += velx
self.accum_y += vely
time_elapsed = time_curr - self.time_start
from analogoutNoise import FicTracAoutNoise
from analogout90deg import FicTracAout90deg
import time
#for a certain amount of time run block 1
#Block 1
for x in range(2):
client = FicTracAout90deg()
client.run(1)
答案 0 :(得分:1)
可能的问题是,行for item in self.pubsub.listen():
从不返回值,因此无法完成执行。如果该语句未完成执行,则其余代码将不会运行,并且不会检查外部循环。
答案 1 :(得分:-1)
请发布SSCCE。为了使您的脚本运行,我必须添加from datetime import datetime, timedelta
。以下代码起作用,并且在结构上与您的代码相似:
from datetime import datetime, timedelta
from time import sleep
tBegin = datetime.now()
tEnd = tBegin + timedelta(seconds=100)
while datetime.now() < tEnd:
print(datetime.now())
sleep(10)
print(datetime.now())
由于这可行,所以在我看来问题不在于时间终点,而在于while
循环的内部。它可以在100秒内执行大量迭代,这意味着它一直都在固定处理器,并积累了大量垃圾。如@iamchoosinganame建议的那样,最好考虑采用其他方法。