微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python电报机器人中的作业队列问题

如何解决python电报机器人中的作业队列问题

y=str("12:50AM")+"+0000"
bot_refresh_time = datetime.strptime(y,'%I:%M%p%z').timetz()
bot_refresh_time=bot_refresh_time.replace(tzinfo = tz)
updater.job_queue.run_once(bot_bal,bot_refresh_time,name="daily_check_task")

上面的代码执行没有错误,它被添加到作业队列但没有调用回调。

虽然如果我将 run_once 更改为 run_daily,它运行得非常好 即updater.job_queue.run_daily(bot_bal,name="daily_check_task")

如果上面代码中的时区是“None”(tzinfo=None),那么 run_once 工作得很好,所以我认为问题出在时区上,但如果是这样,那么 run_daily 不应该工作,因为它们都使用 datetime.time 作为语法中的时间

作业队列 run_once 的语法,用于 python 电报机器人。

作业队列 run_daily 的语法,用于 python 电报机器人。

任何建议或答案都会有所帮助。我只是编码初学者:)

编辑: run_once 有效,但不是将给定时间设置为时区 (bot_refresh_time=bot_refresh_time.replace(tzinfo = tz)),而是将时间转换为给定时区(即,如果我的时区是亚洲/加尔各答,并且给定时间是 01 :00AM,在使用 run_once 时,作业在 06:30AM IST 而不是 01:00AM IST 执行)。这个问题只在使用run_once时出现,run_daily

没有问题

解决方法

从 13.0 版开始,JobQueue 只能处理 pytz 时区,因为 PTB 将库 APScheduler 用于 JobQueue。请注意,不再支持旧版本。 run_once 的一个工作示例是:

import datetime as dtm
import pytz

from telegram.ext import Updater

updater = Updater('TOKEN')


def test(_):
    print('running at',dtm.datetime.utcnow())


time = pytz.timezone('Asia/Kolkata').localize(dtm.datetime.now() + dtm.timedelta(seconds=5))
updater.job_queue.run_once(test,time,name="daily_check_task")
updater.start_polling()
updater.idle()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。