Celery有任务等待完成与之前使用共享参数调用的相同任务

时间:2018-03-19 17:59:30

标签: python queue celery celery-task

我目前正在尝试设置芹菜来处理来自聊天机器人的响应并将这些回复转发给用户。

chatbot命中我服务器的/ response端点,触发server.py模块中的以下功能:

def handle_response(user_id, message):
"""Endpoint to handle the response from the chatbot."""
tasks.send_message_to_user.apply_async(args=[user_id, message])
return ('OK', 200,
        {'Content-Type': 'application/json; charset=utf-8'})

在我的tasks.py文件中,我导入celery并创建send_message_to_user函数:

from celery import Celery
celery_app = Celery('tasks', broker='redis://')

@celery_app.task(name='send_message_to_user')
def send_message_to_user(user_id, message):
"""Send the message to a user."""
# Here is the logic to send the message to a specific user

我的问题是,我的聊天机器人可能会向用户回复多条消息,因此send_message_to_user任务已正确放入队列,但随后出现竞争条件,有时消息会以错误的顺序到达用户。

如何让每个send_message_to_user任务在执行之前使用相同的名称和相同的参数“user_id”等待上一个任务?

我查看了这个帖子Running "unique" tasks with celery,但锁不是我的解决方案,因为我不想在释放锁时实现丑陋的重试。

有没有人知道如何以干净(-ish)的方式解决这个问题?

此外,这是我在这里的第一篇文章,所以我愿意接受任何改进我的请求的建议。

谢谢!

0 个答案:

没有答案