蟒蛇龙卷风周期性回调在特定时间



我的目标很简单:在特定时间启动周期回调。我试图到处寻找,但所有阅读的示例都与当前时间的时间增量有关,而不是与定义的时间有关。

我写一个简单的例子。

import tornado.ioloop
import datetime
from datetime import date, time
from tornado.ioloop import IOLoop, PeriodicCallback
def startService():
    print("periodic thing")

def periodicCallback():
    periodic = PeriodicCallback(callback=startService,callback_time=5000)
    periodic.start()
if __name__ == "__main__":
    main_loop = IOLoop.instance()
    # I want to set a specific time
    starting_time = time(14, 30, 00)
    # After this time i would want to have the message "periodic thing" every callback_time
    (...)
    #my first test but i have error about deadline unsupported:
    IOLoop.current().add_timeout(starting_time, periodicCallback)
    main_loop.start()

感谢您的帮助

你看到的错误 - Unsupported deadline - 是因为add_timeout接受一个datetime.timedelta的对象,而你给它一个datetime.time的对象。

由于您希望在特定时间运行回调,因此可以计算到该时间的时间增量。

import datetime
# see the current time
now = datetime.datetime.now()
# create a datetime object for your desired time
starting_time = datetime.datetime(year=2018, month=3, day=13, 
                                  hour=14, minute=30) 
# subtract `now` from `starting_time`
# to calculate timedelta
td = starting_time - now
main_loop.add_timeout(td, periodicCallback)

如果yearmonthdaynow时间相同,您还可以执行以下操作:

starting_time = datetime.datetime(year=now.year, month=now.month, day=now.day, 
                                  hour=14, minute=30)   

相关内容

  • 没有找到相关文章

最新更新