【问题标题】:TypeError: Unsupported deadline datetime.datetime(....)TypeError:不支持的截止日期 datetime.datetime(....)
【发布时间】:2021-12-23 15:57:13
【问题描述】:

我正在尝试在 Tornado 中使用 IOLoop 定期运行一个函数。但是,下面的代码会报错吗?

TypeError: 不支持的截止日期 datetime.datetime(2021, 11, 11, 0, 35, 49, 445200)

from tornado.ioloop import IOLoop
import datetime

def schedule_next_email():
    # t = datetime.date.today() + datetime.timedelta(seconds=10)
    t = datetime.datetime.now() + datetime.timedelta(seconds=10)
    # t2 = datetime.datetime.combine(t, datetime.time.min)
    def wrapper():
        print('test')
        schedule_next_email()
    IOLoop.current().add_timeout(t, wrapper)  # Error

schedule_next_email() 

参考:How to start Tornado periodic callback at a specific time?

回溯(最近一次通话最后): 文件“”,第 1 行,在 文件“”,第 8 行,在 schedule_next_email 文件“C:\Users\...\anaconda3\lib\site-packages\tornado\ioloop.py”,第 585 行,在 add_timeout raise TypeError("不支持的最后期限 %r" % 最后期限) TypeError: 不支持的截止日期 datetime.datetime(2021, 11, 11, 0, 47, 28, 944375)

【问题讨论】:

    标签: python tornado


    【解决方案1】:

    add_timeout 采用timedelta,而不是datetime,作为截止日期参数,所以直接传递timedelta

    from tornado.ioloop import IOLoop
    import datetime
    
    def schedule_next_email():
        t = datetime.timedelta(seconds=10)
        def wrapper():
            print('test')
            schedule_next_email()
        IOLoop.current().add_timeout(t, wrapper)
    
    schedule_next_email() 
    

    确保 IO 循环以一种或另一种方式开始;我在末尾添加了IOLoop.current().start() 用于测试目的,但对于生产代码可能会有所不同。

    【讨论】:

    • @ca9163d9 我猜 Tornado 从 2016 年到现在对其 API 进行了一些更改,这就是为什么另一个问题的代码不起作用的原因。
    • 我也更新了答案,希望能解决您的问题。
    • 谢谢。添加tornado.ioloop.IOLoop.current().start()后,它现在可以工作了。
    • 顺便说一句,我使用了另一个答案的方法 - IOLoop.current().add_timeout(datetime.datetime.timestamp(t), wrapper)
    • @ca9163d9 它不应该导致堆栈溢出,因为这不是递归调用:包装器调用 schedule_next_email,它在事件循环上设置回调以调用包装器;但是,schedule_next_email 直接调用 wrapper。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多