【发布时间】:2017-07-27 14:21:49
【问题描述】:
我可能不正确地使用芹菜。但是我正在开发的聊天机器人需要带有 redis 的 celery 来执行异步任务。这是我正在使用的框架:http://microsoftbotframework.readthedocs.io/en/latest/asynctasks/。
我的特定用例目前要求我永远运行 celery 任务,并在其间等待一段任意时间,范围从 30 分钟到 3 天。像这样的
@celery.task
def myAsyncMethod():
while true:
timeToWait = getTimeToNextAlarm()
sleep(timeToWait)
sendOutMessages()
基本上,我有一个永远不会退出的异步进程。我很确定不应该像这样使用芹菜。 所以我的问题是,我如何创建一个 celery 任务来处理第一个任务,生成一个任务并将其提交到 celery 队列并退出。基本上是这样的:
@celery.task
def myImprovedTask():
timeToWait = getTimeToNextAlarm()
sleep(timeToWait)
sendOutMessages()
myImprovedTask().delay() # recursive call to async method for next event
不一定是递归的,甚至不是这样的,而是 celery 原本打算使用的方式(我相信用于短期任务?)
Tl;dr:我如何从另一个任务中创建一个 celery 任务并使原始任务退出?
请告诉我是否应该进一步解释。谢谢。
【问题讨论】:
-
如果你想定期运行一个任务,那么它就在这里:docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
标签: python asynchronous redis celery botframework