如何在Django中添加简单的延迟任务?
我正在创建一个聊天机器人,需要一个解决方案,以便在特定延迟后向用户发送消息。我用Nginx、Gunicorn和Django设置了我的系统。其想法是,如果机器人需要向用户发送多条消息,它可以将后续的每条消息延迟一定时间,然后再发送给用户,使其看起来更“人性化” 但是,简单的如何在Django中添加简单的延迟任务?,django,multithreading,celery,chatbot,Django,Multithreading,Celery,Chatbot,我正在创建一个聊天机器人,需要一个解决方案,以便在特定延迟后向用户发送消息。我用Nginx、Gunicorn和Django设置了我的系统。其想法是,如果机器人需要向用户发送多条消息,它可以将后续的每条消息延迟一定时间,然后再发送给用户,使其看起来更“人性化” 但是,简单的线程化.Timer方法不起作用,因为用户可能会在提示将来更改消息的任何时刻中断此过程,但计时器线程可能无法停止,因为它们位于不同的工作线程上。到目前为止,我遇到了两种解决方案: 使用threading.Timer盲目地检查数据库
线程化.Timer
方法不起作用,因为用户可能会在提示将来更改消息的任何时刻中断此过程,但计时器线程可能无法停止,因为它们位于不同的工作线程上。到目前为止,我遇到了两种解决方案:
threading.Timer
盲目地检查数据库中的发送列表,可能会导致大量不需要的线程出现问题。也会使数据库不那么干净/有序理想情况下,最好的解决方案是一个框架,在这个框架中,我可以为每个对话“模拟”一个新的bot,这样它就可以充当自己的实体,并将所有状态/消息队列信息保存在内存中。当bot需要根据预设延迟或传入消息执行某些操作时,此框架只需将资源分配给bot。有这样的东西吗?我个人会用芹菜来做这个;执行延迟的函数调用是它的工作。我不知道为什么知道什么消息属于哪里比在一个线程中执行更困难
但您可能还想调查Andrew Godwin正在做的新工作,因为这是为了支持异步后台任务。我的意思是处理取消任务。我必须将任务ID存储在某个地方(我猜是一个数据库),才能知道针对特定对话取消哪些任务。Django通道看起来很酷,但对于我的用例来说仍然有点混乱(可能是过度使用)。