2015-07-21 19 views
-1

我有这个下面的代码和我陷在while循环的Python .datetime.datetimenow()和datetime.timedelta()

我知道有与while datetime.datetime.now() < (datetime.datetime.now() + datetime.timedelta(minutes=wait_time)):线有问题。

任何人都可以帮忙吗?

nodes_with_scanner = [] 
    wait_time = 60 
    while datetime.datetime.now() < (datetime.datetime.now() + datetime.timedelta(minutes=wait_time)): 
     nodes_with_scanner = get_nodes_with_scanner_in_dps(self.node_names, scanner_id, username=self.users[0].username) 
     log.logger.debug("Number of pre-defined {0} scanners detected in DPS: {1}/{2}".format(scanner_type, len(nodes_with_scanner), len(self.node_names))) 

     if state == "create": 
      if len(self.node_names) == len(nodes_with_scanner): 
       log.logger.debug("All {0} pre-defined scanners with id '{1}' have been successfully created in DPS for nodes '{2}'".format(scanner_type, scanner_id, ", ".join(self.node_names))) 
       return 
     elif state == "delete": 
      if len(nodes_with_scanner) < 1: 
       log.logger.debug("All {0} pre-defined scanners with id '{1}' have been successfully deleted in DPS for nodes '{2}'".format(scanner_type, scanner_id, ", ".join(self.node_names))) 
       return 
     log.logger.debug("Still waiting on some {0} pre-defined scanners to '{1}' in DPS; sleeping for 1 minute before next check".format(scanner_type, state)) 
     time.sleep(60) 
+1

Eve只要你一次性调用它,'datetime.datetime.now()+ datetime.timedelta(minutes = wait_time)'英寸到未来。 – NightShadeQueen

+1

另外,你碰巧在其他地方使用'datetime'吗?因为,说实话,你可以在这里使用'time.time()'。 – NightShadeQueen

+0

你被困在while循环中'datetime.datetime.now()'将总是小于'(datetime.datetime.now()+ datetime.timedelta(minutes = wait_time))''。 –

回答

2

你问如果当前时间当前时间加上增量较小。当然,每一次都是如此,未来总是会走向未来。

记录的开始时间一旦

start = datetime.datetime.now() 
while datetime.datetime.now() < start + datetime.timedelta(minutes=wait_time)): 

如果wait_time不会在循环变化,存储结束时间(当前时间+δ):

end = datetime.datetime.now() + datetime.timedelta(minutes=wait_time)) 
while datetime.datetime.now() < end: 

这可能是更容易在这里使用time.time()

end = time.time() + 60 * wait_time 
while time.time() < end: 
+0

非常感谢。简直不敢相信我没有注意到这一点。再次感谢。 – Dante

+0

1.基于datetime.now()的解决方案可能会在DST转换期间失败,例如由于北半球秋季的“倒退”。查看[查找是否在日期时间之间经过了24小时 - Python](http://stackoverflow.com/q/26313520/4279)2.'time.time()'可能由于计算机时钟调整而失败(跳转可能很大一个VM)。 'time.monotonic()'可以用于某些使用情况。 – jfs

+0

@JFSebastian:是的,'time.monotonic()'不会祈祷时间调整,但仅适用于Python 3. –

1

你在你的while循环使用datetime.datetime.now(),拿什么每次迭代,你是否现在时间是较低的,则现在时间+增量。

这在逻辑上是错误的,因为它永远是真的,因为现在的时间将总是低于现在的时间加上增量。

你应该把它改成这样:

time_to_start = datetime.datetime.now() 
while datetime.datetime.now() < (time_to_start + datetime.timedelta(minutes=wait_time)): 
    print "do something" 
相关问题