Telebot + Celery + pytransitions:响应任务
Telebot + Celery + pytransitions: response to task
我想在延时后发送一些消息,使用 Celery。用户收到消息后,它会触发新的状态。为此,我需要 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任务。
我假设你不能发送它,因为它不可序列化,对吧?如果是这种情况,您唯一的选择是根据需要发送尽可能多的参数作为字典或元组,并在 Celery 任务中创建 telebot.types.Message
。
您可以尝试 jsonpickle 从腌制的 telebot.types.Message 对象中生成 JSON,将其传递给您的 Celery 任务,并在任务中使用 jsonpickle 重新创建对象。
我想在延时后发送一些消息,使用 Celery。用户收到消息后,它会触发新的状态。为此,我需要 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任务。
我假设你不能发送它,因为它不可序列化,对吧?如果是这种情况,您唯一的选择是根据需要发送尽可能多的参数作为字典或元组,并在 Celery 任务中创建 telebot.types.Message
。
您可以尝试 jsonpickle 从腌制的 telebot.types.Message 对象中生成 JSON,将其传递给您的 Celery 任务,并在任务中使用 jsonpickle 重新创建对象。