Telebot + Celery + pytransitions:对任务的响应

问题描述 投票:1回答:1

我想在延时后使用芹菜发送一些消息。用户收到消息后,其触发新状态。为此,我需要将telebot.types.Message对象作为Celery任务中的参数发送。如何正确执行此操作?

我启动Celery任务的过渡功能:

 def delay_message(self, event):
        celery_utils.delay_message.apply_async(kwargs={'response': self.response}, countdown=1) # self.response is telebot.types.Message

芹菜任务:

@celery.task()
def delay_message(response):
    machine = routes.DialogMachine(transitions=app.config['transitions'])
    machine.response = response
    machine.send_random_motivation_message()

send_random_motivation_message()中,我需要telebot.types.Message作为self.response,但无法将此类型发送给Celery任务。

python celery python-telegram-bot
1个回答
1
投票

我假设您无法发送它,因为它不可序列化,对吗?如果是这种情况,唯一的选择是发送所需数量的参数作为字典或元组,并创建telebot.types.Message inside Celery任务。

[您可以尝试jsonpickle从腌制的telebot.types.Message对象中生成JSON,将其传递给Celery任务,然后在任务内部使用jsonpickle重新创建该对象。

© www.soinside.com 2019 - 2024. All rights reserved.