我有一个网络应用程序,我正在尝试使用芹菜从数据库加载后台任务。我目前正在根据请求加载数据库,但是希望每小时加载一次任务并让它们在后台运行。我正在使用flask并在python中进行编码。我也运行了redis。
到目前为止,使用芹菜我让工作人员处理任务和节拍,以便在一段时间内将任务发送给工人。但我想从工作者检索结果[数据帧或查询],如果结果没有准备好,那么它应该加载工作者的先前结果。
关于如何做到这一点的任何想法?
修改
我正在使用sqlalchemy从数据库中检索结果,并且我将结果呈现在网页中。我有我的主页,其中包含所有各种链接,这些链接都会导致我想要在后台加载不同的图形,因此用户无需等待很长的加载时间。
答案 0 :(得分:8)
Celery Task正由一名工人执行,其结果存储在Celery Backend。
如果我找到你的话,我认为你没有多少选择:
您可以查找result of a task if you provide it's id。您可以在想要查找状态时执行此操作,例如(celery
是Celery应用程序):result = celery.AsyncResult(<the task id>)
使用callback在新结果准备就绪时更新。
我个人在类似情况下使用选项#1(使用MongoDB),发现它非常易于维护和灵活。但是,由于您的用户界面的性质,选项#3将更适合您的需求。