0

私の目標は非常に単純です。特定の時間に定期的なコールバックを開始することです。私はどこでも見ようとしましたが、読んだすべての例は、定義された時間ではなく、現在の時間のタイムデルタに関連しています。

簡単な例を書きます。

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()

手伝ってくれてありがとう

4

1 に答える 1

0

エラー - Unsupported deadline- あなたが見ているのは、あなたがオブジェクトを与えているのに対し、オブジェクトをadd_timeout取るからです。datetime.timedeltadatetime.time

特定の時間にコールバックを実行したいので、その時間までの timedelta を計算できます。

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)

yearまたはmonthまたはdayが時間と同じ場合は、次のnowこともできます。

starting_time = datetime.datetime(year=now.year, month=now.month, day=now.day, 
                                  hour=14, minute=30)   
于 2018-03-13T18:09:28.530 に答える