gpt4 book ai didi

django - 如何在Django中添加简单的延迟任务?

转载 作者:行者123 更新时间:2023-12-03 13:04:01 25 4
gpt4 key购买 nike

我正在创建一个聊天机器人,并且需要一种解决方案,以便在特定的延迟之后将消息发送给用户。我使用Nginx,Gunicorn和Django设置了系统。这个想法是,如果机器人需要向用户发送几条消息,它可以将每条后续消息延迟一定的时间,然后再将其发送给用户,看起来更加“人性化”。

但是,简单的threading.Timer方法将不起作用,因为用户可能会随时中断此过程,提示更改将来的消息,但是由于定时器线程位于不同的工作线程上,因此可能无法将其停止。到目前为止,我遇到了两种解决方案:

  • 盲目使用threading.Timer来检查数据库中的待发送列表,可能会出现很多不需要的线程的问题。也使数据库不那么干净/组织。
  • 使用celery或其他系统来执行这些将来的任务。看起来像是过度杀伤和过度设计一个简单的问题。任务将始终只是延迟的函数调用。处理哪些消息属于哪个 session 也很麻烦。

  • 解决此问题的最佳解决方案是什么?

    另外,还有一个更通用的问题:

    理想情况下,最好的解决方案是一个框架,在该框架中,我可以为每次对话“模拟”一个新的漫游器,使其充当自己的实体,并将所有状态/消息队列信息自身保存在内存中。对于这种框架,仅当机器人需要根据预设的延迟或传入消息执行某些操作时,才有必要向机器人分配资源。有这样的东西吗?

    最佳答案

    就我个人而言,我会使用 celery 。执行延迟的函数调用是它的工作。而且我不知道为什么知道什么消息属于哪里比在线程中处理更多的问题。

    但是您可能还想研究Andrew Godwin正在执行的新Django-Channels工作,因为该工作旨在支持异步后台任务。

    关于django - 如何在Django中添加简单的延迟任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37407299/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com