在特定时间段内无法正常运行功能

时间:2019-06-03 14:55:44

标签: python

我试图在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)

“运行”功能似乎从未停止,我也不明白为什么。

2 个答案:

答案 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建议的那样,最好考虑采用其他方法。