不断从芹菜工处取回结果

2024-04-18 19:16:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个web应用程序,在这个应用程序中我试图使用celeri从数据库加载后台任务。我目前正在根据请求加载数据库,但希望每小时加载一次任务,并让他们在后台工作。我正在使用flask并用python编写代码。我也运行redis。在

到目前为止,我用芹菜让工人处理任务,并让节拍每隔一段时间将任务发送给工人。但是我想从worker检索结果[一个数据帧或查询],如果结果还没有准备好,那么它应该加载worker之前的结果。在

有什么办法吗?在

编辑

我使用sqlalchemy从数据库检索结果,并在网页中呈现结果。我有我的主页,它有所有的不同的链接,所有导致不同的图形,我想在后台加载,这样用户不必等待很长的加载时间。在


Tags: 数据代码redisweb数据库应用程序flask后台
1条回答
网友
1楼 · 发布于 2024-04-18 19:16:33

芹菜Task正在由一个工人执行,它的结果存储在Celery Backend中。在

如果我没听错的话,我想你只有几个选择:

  1. ^图加载任务的{a3}中,将所需内容作为任务的副作用存储在数据库中。必要时,查询该数据库中的最新结果。如果DB是Redis,您可能会发现ZADDZRANGE合适。这样你就可以得到新的,如果有的话,或者以前的如果没有。在
  2. 你可以找result of a task if you provide it's id。当您想知道状态时,可以这样做,比如(其中celery是Celery应用程序):result = celery.AsyncResult(<the task id>)

  3. 当新结果准备就绪时,使用callback进一步更新。

  4. 让一个后台线程wait作为AsyncResult,或native_join(Redis支持),并相应地进行更新(不推荐)

我个人在类似的情况下使用了选项1(使用MongoDB),发现它非常易于维护和灵活。但是,由于用户界面的特性,选项3可能更适合您的需要。在

相关问题 更多 >