【发布时间】:2022-01-01 00:54:54
【问题描述】:
我正在构建一个基于 Django 的项目,我的意图之一是让一个电报机器人从电报组接收信息。我能够实现机器人在 Telegram 中发送消息,没有问题。
此时,我有几个 Celery 任务正在与 Beat 和 Django web 一起运行,这些任务已解耦。一切都很好。
我看到 python-telegram-bot 正在运行其中一个示例 (https://github.com/python-telegram-bot/python-telegram-bot/blob/master/examples/echobot.py) 中的函数,该函数等待空闲以接收来自 Telegram 的数据。现在,我在 Celery 中的所有任务都是周期性的,并且每 10 或 60 分钟被 Beat 调用一次。 如何在我的配置中使用 Celery 运行这个非周期性任务?我说的是非周期性的,因为我知道它会等待内容直到被手动中断。
-
Django~=3.2.6
-
芹菜~=5.1.2
CELERY_BEAT_SCHEDULE = { 'task_1': { 'task': 'apps.envc.tasks.Fetch1', 'schedule': 600.0, }, 'task_2': { 'task': 'apps.envc.tasks.Fetch2', 'schedule': crontab(minute='*/60'), }, 'task_3': { 'task': 'apps.envc.tasks.Analyze', 'schedule': 600, },}
在我的 tasks.py 中,我有这样一项任务:
@celery_app.task(name='apps.envc.tasks.TelegramBot')
def TelegramBot():
status = start_bot()
return status
作为 start_bot 的实现,我只是复制了 echobot.py 示例,并在那里添加了我的 TOKEN(当然,示例中不同命令的函数也在那里)。
【问题讨论】:
-
python-telegram-bot 的仓库也有人问过这个问题,见here
标签: python django celery telegram python-telegram-bot